您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15525|回复: 0
打印 上一主题 下一主题

[Vue.js] Vue.js 模板语法

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-1 23:16:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Vue.js 模板语法
Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。
Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统。
结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。

插值文本
数据绑定最常见的形式就是使用 {{...}}(双大括号)的文本插值:
  1. <div id="app">% F% S, r( x0 [
  2.   <p>{{ message }}</p>
    % z4 ~$ \: s# \; K, X; ?8 L* @3 _
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    ' V0 p: [& [9 b* P
  2.     <div v-html="message"></div>
    . L8 ?, _# x9 E3 u% m" R1 t
  3. </div>( O6 \+ J& i: p! n* J; J6 B( @
  4.    
    . C- R2 ]. @) C3 A
  5. <script>
    1 ^5 g$ Y% ^4 Q) Q9 w
  6. new Vue({) D: t( \. i8 y" H. \4 D
  7.   el: '#app',$ @) n- V6 C' e% ]0 b3 k& y
  8.   data: {) g! B% \6 @5 k8 Q8 o6 t( y3 o7 D
  9.     message: '<h1>菜鸟教程</h1>'+ a  m* x# M+ d
  10.   }& N: D% I% M  g
  11. })
    - p. q+ A( N$ @! x6 G' o4 G
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">1 g/ D7 P1 P2 A# w& D7 E2 P
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">, a9 v( X* U  W5 x+ `/ z+ S
  3.   <br><br>
    9 D% z2 ]; F5 t* r  e" R
  4.   <div v-bind:class="{'class1': class1}">  Q; ]' k' B  S1 F3 |  h( u5 P
  5.     directiva v-bind:class: F5 i. [8 v) w
  6.   </div>
    - ]3 M3 L% M# Q- e6 _
  7. </div>2 F" M% [( m' J9 p
  8.     6 u" v. X/ \0 G2 ~
  9. <script>  ^" F+ l. R9 E$ R( h0 E
  10. new Vue({
    $ e  H* j9 [: F+ j3 W- q* c- x
  11.     el: '#app',7 l, Z( f+ i7 w  u0 Q' i
  12.   data:{8 S. ?9 v6 l( b+ u9 W0 e: [
  13.       class1: false
    3 ?- u& I0 z0 C1 w
  14.   }
    / |! I& t7 ~+ m# F1 \3 e4 T0 l. J
  15. });/ ^; N+ w- }) ~- J
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">( x8 Z7 |  Z5 E6 ^8 _
  2.     {{5+5}}<br>; h* \7 _; m7 X
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    1 X. L$ ?4 X( ^; L6 b
  4.     {{ message.split('').reverse().join('') }}
    / e2 J# Z8 n4 w" @, A& V) [0 T
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>5 P1 U2 U6 `- I# o( ~0 f
  6. </div>
    ) r9 C$ S5 g; i2 N1 j8 j
  7.     . y1 F8 ?' V. O) _$ e
  8. <script>
    ) {0 E7 ]6 Y7 M1 y8 _; [9 @
  9. new Vue({. v0 \5 |# `% K7 _4 ]8 H
  10.   el: '#app',0 {, [4 w! v) d# h) J: P) `
  11.   data: {0 S- Z( Z! z# j5 I+ _
  12.     ok: true,
      y2 \, E$ L7 f: D2 f% \
  13.     message: 'RUNOOB',# Q" s# K5 ~( a, Q
  14.     id : 1
    9 Z: K. N' \6 G/ `7 M' F! \$ k/ h
  15.   }
    . @6 M* p3 I4 B; D7 Z
  16. })
    - b& T% N, ?( v  s+ i2 h  D1 O0 ^9 w
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">! T  B6 w, A! D# E0 |
  2.     <p v-if="seen">现在你看到我了</p>
    & |6 R, q7 {6 U" @$ |
  3. </div>
    # }. K. }7 ^, O" u+ b
  4.     2 e. m3 j* C, z' j- V0 h! f) \# Y
  5. <script>7 }! z: f$ S4 m0 w, O
  6. new Vue({
    $ D; J2 Z1 R* ~4 g/ J+ Y
  7.   el: '#app',0 {' w: t  _0 q+ U" q5 T
  8.   data: {
    9 ]5 v! g( C$ ]+ L6 k7 j+ K# K: W
  9.     seen: true
    ' v+ K5 T4 H% \0 w$ ?4 x! A
  10.   }. h& a, B; j  U. y( P* W
  11. })
    - v8 T% ^. D1 K% C
  12. </script>
复制代码

1 Z9 x/ f2 B% Y( U- {
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    : M. ^1 |, \0 S- M* K8 {4 u
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    * x# O" ?0 V- X7 w# `; l0 ?
  3. </div>9 X$ t- y# m% ~+ n
  4.     7 y# ?  g# k2 a9 D
  5. <script>. `6 \5 E0 W: @5 n8 b* H
  6. new Vue({0 K% G0 P2 P' f5 U& l9 F# R: G
  7.   el: '#app',$ g7 G/ p* ?" p& i" ~( c
  8.   data: {# k) G" U; ^$ Z# J
  9.     url: 'http://www.runoob.com'
    0 X# T8 `- Q7 g& M( {% Q. z
  10.   }
    ; M2 W1 x) w. d& S- c: _% }
  11. })
    . s, v$ ?6 z- F) O% T, d: m
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

* Y7 p8 A) T$ B: ]# z6 o% `
  1. <div id="app">6 B& s* v1 D% \, w& L, l
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>9 N% x4 k: q& A$ `; U9 O1 ~& I
  3. ) h: i8 m$ R# P
  4. </div>
    + a" ~3 j* ]) `* ?
  5. 4 \  V1 |7 A/ v5 y+ k
  6. <div id="app2">
    9 l( c! T8 h- g) k! r3 O
  7.    <p v-for="val in arr">- t* y; T/ s7 ^# a$ w
  8.     {{val.a}}
    : b) q' B8 I2 g, l% _; ~3 z6 i
  9.    </p>
    ( W' }8 v2 O* x6 \' k5 Z
  10.    <a  v-on:click="tap">点我</a>  M6 k  @6 z7 \2 S/ T
  11. </div>
    9 ^4 L& ?( M7 [0 A* d# v; p: y: ^

  12. ( _+ I* n3 ]; B. k+ J: Q
  13. * w6 F8 c& `1 c. ?7 q
  14. <script>
    5 g, [# K% O& P5 p
  15. new Vue({
      Q# R# Z1 z; X# S& E
  16.   el: '#app',2 T9 Q6 y# [. {
  17.   data: {
      M6 P: l5 B! m$ m% P4 t- W
  18.     url: 'http://www.cncml.com'* V9 k/ L0 T0 ^1 [. s
  19.   }
    ' o6 r# _. c$ \; F9 ?9 i+ U! i6 u8 W
  20. })& u* b. B* D+ x2 z' u( O
  21. new Vue({
    2 d, }( ^! S7 `5 g
  22.   el: '#app2',2 ^" A/ c. }. R" _
  23.   data: {
    1 u. r* `! [, T3 ^
  24.     arr:[
      N; \2 D2 J$ |+ I) `) y
  25.      {a:'bb'},% X& k' ?: s  O2 F8 m) C: I
  26.      {a:'cc'}
    / _9 q6 v4 c2 B" y: B% k( p
  27.     ]
    , f+ a7 Q4 ~% F9 @0 i# f* R
  28.   },
    # P$ @( z# [# B
  29.    methods:{
    - r9 A4 R' z  @2 x( t  k# O
  30.     tap : function(){
    ( F) F+ U# E# h  J/ Y* ~5 y% S$ i" b" P
  31.      this.arr.unshift({a:'new'})4 d! V( A8 a8 W3 R; H- ]' y& s
  32.     }
    # ?8 C6 w" K& n
  33.    }: Q* Y! c# a! w/ [9 y4 ]; x! o. B5 o
  34. })8 z! {3 o- \7 D2 d& \6 f% [
  35. </script>
复制代码

, X" F$ n6 V; T0 E; q

+ p9 [/ P, O* |: ?1 ]: v9 s5 P2 S
在这里参数是监听的事件名。
7 N9 o! [3 }4 d$ ~4 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 23:59 , Processed in 0.089950 second(s), 22 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!