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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15020|回复: 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">
    ) L- H1 M# n5 A# i& P
  2.   <p>{{ message }}</p>) X; v7 e+ S1 P8 p" U) t8 O) X- A
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">0 Q3 W4 b/ D& o5 y' |$ O, t% c
  2.     <div v-html="message"></div>$ F8 G! x( l1 i- g1 x
  3. </div>; ^9 R/ i4 b) X$ i
  4.    
      b; b9 ~8 H' f4 F" C- a
  5. <script>2 @" j/ ~; w; _+ a& V
  6. new Vue({( a4 a0 ?6 j+ p) ~
  7.   el: '#app',5 m: F0 V1 }  ^6 W5 U
  8.   data: {- v  u7 U! c  n; [
  9.     message: '<h1>菜鸟教程</h1>'
    4 A3 h0 C( K& s2 v9 h( `
  10.   }  S, h# N2 ?, q  {
  11. })
    " \  z' J- x$ V9 j
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">4 x% N5 }7 J4 o( Q+ L
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ( P3 `% B' o# q6 I0 y0 q
  3.   <br><br>. k, J  P5 K- {% `+ K& }, `3 P9 P
  4.   <div v-bind:class="{'class1': class1}">; G/ d/ k& q: d
  5.     directiva v-bind:class
    - A& g2 U) A7 ^" n
  6.   </div>6 k! e' {9 p- A2 C0 c
  7. </div>+ i9 Z+ a% o* e& l
  8.     . n% ?1 X% [1 C3 Z% u$ b5 |& d" v
  9. <script>
    1 t+ |8 x4 n3 ~; g5 v6 p4 }
  10. new Vue({
    $ i* b% p+ ]6 O7 }
  11.     el: '#app',
    ' ^- u4 V) j- W! z  y" q4 C. }
  12.   data:{
    $ N4 H) Z) `! [) z0 \' X
  13.       class1: false
    : _, C4 b8 o0 H9 r) P1 O
  14.   }
    ) i- \  y+ L9 |, O3 N' V% t
  15. });
    ) T# B  j. @4 ]) s
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    6 S, G& k! }0 _/ e9 w/ n- e
  2.     {{5+5}}<br>$ b- X0 _$ ~# f' @; Q& m7 m
  3.     {{ ok ? 'YES' : 'NO' }}<br>/ C. v0 I3 U7 d' K+ R
  4.     {{ message.split('').reverse().join('') }}( s+ ^+ f' i7 ^! S8 ?9 F, k4 Q
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>$ y& U/ I# j- C8 T3 r
  6. </div>
    6 d# q# L# ?  q: G# E  R
  7.     1 R5 I9 k0 S& _
  8. <script>
    * s3 D6 W. g% ~3 ]# f
  9. new Vue({- Q' a3 C: u. @& t1 D. f0 D8 D! W. B
  10.   el: '#app',5 c  Z" K7 A( h: V) N  m* K
  11.   data: {' |+ X9 {! j" S: u
  12.     ok: true,, x0 ]1 n5 X* `! f2 O; b
  13.     message: 'RUNOOB',
      q1 G; ]5 K  J% T% z! F% b$ s
  14.     id : 1' N' h0 }. g; w6 [* W: s
  15.   }; P# [: b) ^' m9 e3 y9 x& g7 \$ |
  16. })# G4 g: u1 Z0 J$ L
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">( F( @- A* x% h) Q
  2.     <p v-if="seen">现在你看到我了</p>
    , b+ O. o  J7 M. C7 B
  3. </div>" I% W! Z5 f. V$ b; m7 ^: ~# ~
  4.    
    # _! p6 w4 F7 Q, M$ V; t/ X7 R+ @
  5. <script>
    & o4 V- ^: R3 A5 S' ~+ B# _
  6. new Vue({7 }0 K% h$ m* A# }
  7.   el: '#app',
    % N, ?- Y! M6 C* b- L/ ]9 C2 b
  8.   data: {
    * Y9 G4 I/ N+ X' C, D
  9.     seen: true
    4 i3 e3 T6 M: ?
  10.   }; D, U! _5 J4 f: e
  11. }). a* \7 i- O3 w
  12. </script>
复制代码

% q# i- Z5 p5 P% M2 t
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">6 ?! r% m! w( ^; k3 u; G
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    / d. ]7 c1 ~- }3 x6 {% I
  3. </div>9 L8 P: c* i8 W5 b# e% C: n5 i
  4.    
    4 r4 h6 @! s" z
  5. <script>1 \3 i/ L; U5 _( h3 z
  6. new Vue({$ y3 R; h# ~* k0 d6 Q" r+ X4 K' N
  7.   el: '#app',3 a1 s) j+ T# x3 b
  8.   data: {; Z) b, `; w) b' J, b* t+ j6 g% ?* e
  9.     url: 'http://www.runoob.com'
    + K) ]0 L3 u  K1 A% g$ C
  10.   }4 b! B' e, K, k" `, ]1 g  r9 G
  11. })! \, ?. D- a5 g% j/ D
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
* C( {: ^7 \4 n7 {: q6 n  Z
  1. <div id="app">
    ; J: D$ [* ]6 f$ J1 K2 {. H7 ^
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>4 X4 d( D, c2 d, S7 J, [! C

  3. - O4 z$ S6 E# c% |
  4. </div>
    . v& `$ u9 X) q5 X
  5. / q$ d. y$ l2 Q0 f  W$ b
  6. <div id="app2">( ^1 e/ |! p7 i% y- w
  7.    <p v-for="val in arr">' C  t; |/ Z0 t# I
  8.     {{val.a}}
    ( ]; O$ n) D" f' t
  9.    </p>2 z9 L3 Y2 X( L
  10.    <a  v-on:click="tap">点我</a>$ k1 @( C4 B, \
  11. </div>, H, Z3 R: q+ ?$ B: D5 d

  12. + C4 x+ v" }: i

  13. 4 u2 ^* ?: s# u5 [9 `
  14. <script>
    , ]8 z" S! [" t! g+ b( q
  15. new Vue({& \' `( T/ d# U% C) Y4 J) [
  16.   el: '#app',
    ! x: k: p) D* P. ~" S
  17.   data: {4 g9 E/ F- O! E
  18.     url: 'http://www.cncml.com'
    ; i/ f0 @& {1 a/ y. J4 z7 D
  19.   }! B: q0 A4 ^8 e
  20. }), b2 z7 B% h8 ^# ?
  21. new Vue({2 u# I8 |2 ^; W2 o2 [
  22.   el: '#app2',9 O) C$ v; L6 C) N2 B* Y& |
  23.   data: {
    & x  J  p' [6 t3 ?# Q5 U3 i
  24.     arr:[0 ~; K" p, p$ r  S4 A! r+ u& q
  25.      {a:'bb'},
    ! A& F. o, Q- o4 Y& C6 }( E( |
  26.      {a:'cc'}
    8 @% i0 w  b* z
  27.     ]
    ) s! H) Y7 U6 O* N1 B; d
  28.   },
    . E( M! r9 l% N3 k2 D/ Y- k( d
  29.    methods:{
    % b. O3 @( q; G  q/ g+ \6 S# Q0 z- {: e
  30.     tap : function(){
    - \5 e1 |5 S+ s+ c+ V
  31.      this.arr.unshift({a:'new'})
    , ]6 q5 E4 k# M6 h
  32.     }9 c! N/ f, P8 T; z
  33.    }8 K' K% ]# O3 o7 E0 V
  34. })3 x7 I, S0 s! ]: D6 c
  35. </script>
复制代码
: h' F+ U  v! Q

' a8 D$ j- C8 @6 r, \7 i
在这里参数是监听的事件名。

+ T/ P  Q% b0 e2 e; b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 18:22 , Processed in 0.079883 second(s), 22 queries .

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