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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15311|回复: 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">
    ) X& K# M' o6 U( ~7 D4 O8 i
  2.   <p>{{ message }}</p>0 N5 c1 W; @2 c" X7 J
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    0 a. }- B: {- V0 L
  2.     <div v-html="message"></div>$ o8 m9 |. J5 X3 r6 R
  3. </div>! R+ \3 h, o* _3 f
  4.    
    3 ~& X5 P/ w, e+ \: b
  5. <script>2 B. g  x+ ~7 M9 i" w6 Q; q
  6. new Vue({
    / A8 l. i6 C* I" I2 @* _
  7.   el: '#app',& K) M# j, g/ P  q7 ]) \: a( `. W
  8.   data: {
    * k) ?7 N4 _9 E* k
  9.     message: '<h1>菜鸟教程</h1>'
    5 [# w4 M7 ^7 \+ J( ?. E1 y3 V8 ~
  10.   }
    ( z& O1 f  M8 G+ P# k) _4 D
  11. })9 {1 T/ K  _& f* Q7 m
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    % n; [, W; p) _: f
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">) c8 N; }. I0 |
  3.   <br><br>, N. p8 g1 u$ W, |  T! f+ n& I
  4.   <div v-bind:class="{'class1': class1}">
    % U" Z2 b4 W) T5 k' D
  5.     directiva v-bind:class- X+ q& g/ l7 B
  6.   </div>; m2 e- C: i) v; `2 ?7 t
  7. </div>2 J, Y  A) r1 H0 X( X4 i& \% c
  8.     # z/ x5 z# Z  g5 |/ W- z0 r1 C
  9. <script>5 h8 ?3 j; b0 T! E
  10. new Vue({
    ' m8 B# M+ p' X& f9 R
  11.     el: '#app',& ?* `# T1 W6 A/ Z3 o3 m# y
  12.   data:{  T5 V/ f. N+ e2 j7 X9 R
  13.       class1: false' e0 g# l, a+ A# Q4 m
  14.   }
    ) m7 {% ^5 x6 [! T
  15. });" ], }' ^2 L/ `6 u
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    - j( b: D. |! U
  2.     {{5+5}}<br>
    " [  A( h' J; t  `, Q
  3.     {{ ok ? 'YES' : 'NO' }}<br>6 J' T9 K% Y$ {4 t) }$ O( V
  4.     {{ message.split('').reverse().join('') }}
    7 I9 L9 I/ A$ a0 j3 q; _# x
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>% N2 N' {& d9 H3 @4 {/ I* J
  6. </div>, ]9 w) C+ U5 S2 h7 A
  7.    
    " I* e5 S- A7 Q$ Y
  8. <script>- L* r+ C& C& s  _4 ]; K
  9. new Vue({9 @# r" t$ r1 W% i
  10.   el: '#app',$ Z3 X! v7 w9 I7 \( s
  11.   data: {: ]* b0 r" e1 J) l; x, Y% w3 a  S7 @
  12.     ok: true,
    . h4 N" r- g7 ~" ^" m  K
  13.     message: 'RUNOOB',
    : {: f; ]3 G/ Q+ G! I9 G% e
  14.     id : 1
    7 f2 Z' r5 }7 g5 C
  15.   }
    ' l9 P) i# U, _* q7 e
  16. })! ]/ j. X4 T8 J$ S2 c; m
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">) Q- `/ T& o7 n
  2.     <p v-if="seen">现在你看到我了</p>  y0 J* J8 U% a$ Y
  3. </div>8 X& R- G( S+ I6 {
  4.    
    ( x4 L2 r0 c1 z6 m1 G7 _
  5. <script>
    ! T3 G6 v+ C: B- ]
  6. new Vue({1 t! L$ `. J' d+ q; q( r
  7.   el: '#app',
    # W; K  U2 a- {8 k( ^$ k
  8.   data: {
    + g7 O$ k6 G: W: d1 e
  9.     seen: true6 {( d8 B4 y, p4 r, Z- y
  10.   }/ ^* f3 _3 \3 C3 }  o& @. _
  11. })
    $ n, v  v7 O9 k( M
  12. </script>
复制代码

9 ~% `( X% l* l  m  L
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
      \2 {; Q+ b: u3 R; R/ I) b. c
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>" r4 M3 c; O1 z, \8 i2 K& k
  3. </div>
    % ~7 U& \$ K; J0 k
  4.     ! D* k3 h" O- g7 o2 Q
  5. <script>* J2 K$ ^( P$ t4 m
  6. new Vue({+ p+ `$ Z- c' Y$ }4 F( t1 e4 P5 Y, a$ J
  7.   el: '#app',
    ) n+ z* Z6 k" Q4 `
  8.   data: {
    3 C4 ]  K( V2 C- x$ E$ A( y
  9.     url: 'http://www.runoob.com'
    + E7 v8 ?9 ^0 |& _
  10.   }
    $ E7 f& ^1 |+ c
  11. })
    # N. q9 j# e9 D: r
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

! Y0 j  v( O4 A, Z) D  r
  1. <div id="app">' q' D& W: X9 U" m4 L
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>$ u$ ~4 O7 O# j0 L9 K6 H$ o4 ~

  3. : [1 b  c% y( Q7 S+ @
  4. </div>, _7 X* J. l  d1 F( R6 }, V
  5. ) o1 }$ s& K, D5 W0 ]6 t
  6. <div id="app2">& J3 y7 @; g* Q6 I4 J
  7.    <p v-for="val in arr">
    . P; s3 D! N- @. p4 o8 E' ]( G8 }
  8.     {{val.a}}
    ) p7 `8 W4 Q) z4 y3 H9 @; W
  9.    </p>% G8 ?" x1 a" s) C
  10.    <a  v-on:click="tap">点我</a>
    8 [: ]: b' n9 x5 A2 p% H
  11. </div>
    0 _  g8 a" q$ k! Z) Z7 v

  12. # }( P$ [6 \  J, c
  13. # `* m9 ?4 W& Q5 r1 _
  14. <script>
    # Z  w" g% e& t- E
  15. new Vue({
    2 }, @! `1 O; s- b
  16.   el: '#app',
    : t, u' s+ I& M0 z' P' s; a
  17.   data: {- J4 ]" R3 y% T5 {! M/ @: @- g1 N
  18.     url: 'http://www.cncml.com'
    " v- b) o/ k; r# |' W# d) V+ g
  19.   }) k  I& G0 P0 F5 ]
  20. })
    1 U! N% M. o& b- i) O  r
  21. new Vue({8 F8 J+ ~, f# T
  22.   el: '#app2',/ E. Y! w8 w7 m5 V
  23.   data: {2 f. ~. [' T5 K# A' k6 H6 h8 l) i
  24.     arr:[
    ( R4 J. H- S" J/ R% l3 k# Z2 T
  25.      {a:'bb'},
    8 r4 R( u7 Z. W3 Q3 I
  26.      {a:'cc'}
    $ u: J$ [% B  f6 u9 z/ G
  27.     ]
    : @0 ?, t. A% i% Z8 v
  28.   },. O7 }2 W+ W+ x! e" g
  29.    methods:{) o* \( h* {  j0 C; C" ^& ^
  30.     tap : function(){: V4 v; |1 _" T+ o: N8 z
  31.      this.arr.unshift({a:'new'})6 t6 ~4 ~- t# z) T: S, U  T
  32.     }
    5 D3 p5 P0 t+ o% C! d* s
  33.    }+ q! R0 N% v# b6 C: I
  34. })
    ! q* R1 I, ^; I  R9 `
  35. </script>
复制代码
# V! b( y) A. q, k
" I5 L: K5 B4 T: o- e: k
在这里参数是监听的事件名。

( j2 O9 D5 a( r3 ?# ^7 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:58 , Processed in 0.052744 second(s), 23 queries .

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