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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15306|回复: 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">' p2 f3 g$ b6 n- y
  2.   <p>{{ message }}</p>
      L1 {0 L- ?; o! R
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">2 m5 v9 U2 j7 P4 M2 `* L8 `
  2.     <div v-html="message"></div>
    : k8 h% c, d$ s
  3. </div>
    % d% r6 X3 t% g: J) t/ H& n8 E
  4.     6 I' |# m5 ~- k- m& Y6 ?8 l% Z
  5. <script>8 P! Y8 L! k8 ?7 \* X& n- m
  6. new Vue({4 I# ]0 K! j# |# K7 O5 v! x( \* U: i
  7.   el: '#app',- l  i. u: t/ [2 H. r/ w7 w
  8.   data: {. r7 d" M' n$ i: }, ]
  9.     message: '<h1>菜鸟教程</h1>'
    ) D' N/ D6 h! n/ J# k8 d5 q
  10.   }% m* M# c+ a6 P
  11. })
    ) }7 [2 I8 u# @- n0 G4 W3 l9 \
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">0 O) R, o& W. P4 n3 J1 N  ]
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    6 _! D; f2 p" Y0 K: T0 s
  3.   <br><br>
    7 m8 G; b4 O+ c5 h2 G4 L2 {
  4.   <div v-bind:class="{'class1': class1}">
    $ Z5 ]" I) g+ S' t
  5.     directiva v-bind:class' c9 _4 o* d3 m8 \1 T+ c
  6.   </div>( `+ w8 Z- E2 z( ]# D& B1 y6 y3 g
  7. </div>
    ( _1 B3 C( t9 a% r$ R' O/ K
  8.    
    ( _( \+ ?6 q0 @5 ]% t% ]
  9. <script>2 k3 j0 H! h' n, K6 |$ M" z
  10. new Vue({+ j5 s+ H+ m/ \' p% ]# l
  11.     el: '#app',
    : z8 @, [( u8 t, K; C) a
  12.   data:{
    - z1 u8 B5 t1 V
  13.       class1: false
    2 u% R! y( I. N6 h
  14.   }8 J" F* W- D6 e8 G# l: n  _7 }
  15. });
    ) v7 t* N8 ]( x. a* |1 ?% O
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    " p2 S2 {( A# ^0 G) R% T
  2.     {{5+5}}<br>
    6 b2 @! }+ ^1 ?) c( {3 b. s
  3.     {{ ok ? 'YES' : 'NO' }}<br>7 f+ H8 {% ^3 r3 L4 v* a; Z3 ?
  4.     {{ message.split('').reverse().join('') }}
    & B; `. \2 C. M' Q8 i0 Q7 z$ y  n
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    7 `. Z  q; [" F
  6. </div>* \# B) r9 W. Z* d8 c
  7.       ~; n# @9 z1 Y- C3 A' v# F- s) ^
  8. <script>
    + `" s1 o% W  ]7 z( d% U
  9. new Vue({
    9 _, E4 ~: ~/ F+ r
  10.   el: '#app',
    3 x2 {8 e7 T  @' l3 G; z' R- G$ ~: C
  11.   data: {
    7 [+ ~& H% |/ t5 G/ [
  12.     ok: true,$ m2 j+ {% l1 Q
  13.     message: 'RUNOOB',% [3 \9 [4 R* ^; t, M; y) B6 t
  14.     id : 1: p8 A/ `3 o0 f' L& D! v
  15.   }! a2 a$ U4 Z: c6 t$ n" X$ l4 ~
  16. }); `) R  Z* B9 k# n
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">$ s" f& Y; ^0 D" F5 A
  2.     <p v-if="seen">现在你看到我了</p>4 L4 D6 c3 F8 F; X
  3. </div>
    # i" M4 s& o! Q( Q; o
  4.     - D7 [9 w, x( @7 q
  5. <script>4 @2 n1 I7 {& ]5 {# s- q
  6. new Vue({. s& g4 h; K. C
  7.   el: '#app',6 v1 A6 s7 K$ H3 K
  8.   data: {
    - t0 O* ^* e# |9 [2 Y& x2 ]+ L& ]
  9.     seen: true1 f  Q: k* s1 {* B/ D- w: H* I
  10.   }9 T1 c; h& B9 H$ U4 d
  11. })
    : {. J( m9 m7 F0 a( A
  12. </script>
复制代码

8 m1 J8 W% W7 n. [% Y* q& n5 V
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">( ^  D( Q6 t3 ?; U7 c: o7 [  `
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    ' _& C1 P) B4 E, K" @. I
  3. </div>7 H/ c6 g. {" r( c9 r  i
  4.    
    % {$ l/ f' l9 _( s% }' `2 D
  5. <script>
    : i! D( n2 ^7 F/ s3 W
  6. new Vue({; ^9 K7 k% U( W2 x
  7.   el: '#app',- ^' @, ^$ m( W: Z! N# |* c  }
  8.   data: {
    % X* @0 v1 a4 b- R: ?
  9.     url: 'http://www.runoob.com'
    ! D& C' u6 y- p( M& Y
  10.   }- P% y- g( ~8 D7 H0 J+ N& K! S# |6 E
  11. })  r. J0 t( Y* ~! `) O) E9 ?' I. C
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
7 R; E1 v- O# p5 {
  1. <div id="app"># i) X' y$ C# v# H" M
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>7 l0 o2 K+ L) o5 b! x
  3. 3 f1 C5 o$ `2 I* q7 z! E
  4. </div>/ v  a1 k1 f# X7 E# B% W6 ~
  5. ; N( B: c! n2 q4 D/ ?. R+ {3 q1 P9 r, h
  6. <div id="app2">9 I* g8 {! J8 c
  7.    <p v-for="val in arr">( m! W" ^4 ~5 R' `# t
  8.     {{val.a}}
    : ?1 `% ^* D: q& D- \; Q4 V! _
  9.    </p>
    # Q4 v3 S" e- D; [
  10.    <a  v-on:click="tap">点我</a>
    5 }+ u% f- |. d0 h4 Y- H3 q
  11. </div>& e. h! O( O! {1 x, c- }! h( {

  12. $ I/ K( }) A; X
  13. 0 t- Q7 R2 T2 P) J2 e0 T$ F! J
  14. <script>
    ; S- b7 U! k6 f5 ]1 h. W8 y: |8 O" g
  15. new Vue({' D- g' I- z  ]: I" Y
  16.   el: '#app',! X3 E( w$ J/ o2 ?/ i; m
  17.   data: {  y8 M1 ?% B1 X
  18.     url: 'http://www.cncml.com'
    : l' b' J2 F. w/ t. F: L. [
  19.   }6 T! ]% J4 o  Z+ K7 k
  20. })* @* I' P& B) z
  21. new Vue({- T: C& p2 [2 O4 V: U5 _
  22.   el: '#app2',9 j* B# S, l( S# y
  23.   data: {+ q* N- e2 r$ J8 z+ T
  24.     arr:[0 g9 G( ^% S0 Z) @
  25.      {a:'bb'},: H: p8 s: b0 y. w& T& a  X, p( B
  26.      {a:'cc'}1 {; q# ]+ u2 ]5 @/ Y' H0 d- N, E7 x
  27.     ], e- K) }" X' D+ ]- H
  28.   },6 m6 O: M* }" I! K
  29.    methods:{
    + D% }$ Z$ b8 j  s: ]: `
  30.     tap : function(){+ Q/ {7 ?( [: m; P/ j5 c: b  Z
  31.      this.arr.unshift({a:'new'})
    8 l" v5 s" t5 u" ~. l, n8 Q. ?
  32.     }1 \3 o+ E( e* n3 v6 P; |6 [
  33.    }4 D# b2 I8 d8 {) h2 a) a
  34. })5 `, X: a- O7 g. f8 x6 J
  35. </script>
复制代码
! M  B% b9 g! j

5 i+ `' v  M3 W1 m" P* q2 M; v
在这里参数是监听的事件名。

7 e' c5 r: |6 P4 F' k. p& Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:03 , Processed in 0.084110 second(s), 22 queries .

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