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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14875|回复: 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">
    / G0 @5 z; X) M: s
  2.   <p>{{ message }}</p>
    9 |5 E: t! z$ p3 J; I
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    4 n5 G" M7 R& F$ n, t5 V
  2.     <div v-html="message"></div>, X% h1 R3 o' R2 n, H; U
  3. </div>
    7 S# ^4 I! i8 X/ ?+ g7 K8 ~  a
  4.     3 E' W- k. x! {1 X: y% J
  5. <script>
    5 h) C5 [3 k8 V& W
  6. new Vue({
    ! z" ?5 o- j, j
  7.   el: '#app',( l2 U7 b& B8 Y, n3 I
  8.   data: {
    ! Q# ^4 e) P& k+ J
  9.     message: '<h1>菜鸟教程</h1>'
    # O. s) Y6 g$ k! _
  10.   }# @$ [! M8 M& Z: e% }* |
  11. })
    1 p0 U" W- J# q- ?. x
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    3 N& f& T+ G3 p7 j/ K
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    6 b$ ~- r+ a! \) l5 F
  3.   <br><br>6 `3 ]# I# _6 @) F: L. K+ a; y
  4.   <div v-bind:class="{'class1': class1}">5 q' v6 ~+ {* h* @
  5.     directiva v-bind:class
    $ H' N2 O, ^) Y( C% t
  6.   </div>
    9 H# Z, ?7 ?" G  }% Y
  7. </div>4 F8 U. W& x7 f: G
  8.    
    5 r- Y- z; D1 B- k8 A, _5 D4 ]
  9. <script>6 l4 }7 P/ ~8 X' u/ j1 l
  10. new Vue({
    0 C8 X( _; ?9 J' }3 L- s% b- o, b
  11.     el: '#app',
    , @# L% t2 Y* w  k  A
  12.   data:{+ L. i  n  y) \" i
  13.       class1: false
    % i- Y5 _  v& @  p" I2 q
  14.   }2 T2 ?6 D, M1 K: E# J: Q
  15. });
    4 f: ~- {0 P* [3 L0 \& C9 t
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    3 D' K& Y8 a) `  I1 B! w+ v: Z
  2.     {{5+5}}<br>+ k/ x3 J8 @. p6 n# A5 ]
  3.     {{ ok ? 'YES' : 'NO' }}<br>- Y0 X: o+ g! V9 p% e3 @" S
  4.     {{ message.split('').reverse().join('') }}
    8 g) g. [: k! m2 q2 x
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    1 T. E8 V4 X: C: n
  6. </div>
    ( J( Z5 s; C$ Y3 }) S  ?+ G; [
  7.     ; ~  }7 E7 I% A
  8. <script>6 T) E) Q( p9 e5 _( C
  9. new Vue({
    " |8 W3 |1 K8 U( e
  10.   el: '#app',
    ) J7 T( M3 ~4 E" ^
  11.   data: {. I! w2 g9 N4 h& ^
  12.     ok: true,
    ' C, e+ [7 K  H3 w! l. u
  13.     message: 'RUNOOB',6 [% O$ W7 z9 }+ k# }
  14.     id : 1
    4 g: W, m7 T# W% n  Z' U; n) x3 g3 i
  15.   }
    % \' B2 q  R& m# u5 U& b; d0 s
  16. })
    5 l/ m7 Z( `3 R) [- o9 t) E' n
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app"># h7 W8 F4 D) r0 v/ \7 r8 P
  2.     <p v-if="seen">现在你看到我了</p>
    ; F% p$ i: v9 Q/ @1 l: d
  3. </div>0 c3 a* R3 s( l
  4.    
    1 T4 t. |( y7 P
  5. <script>
    ( I2 N+ n2 e2 s' c3 J9 z+ j
  6. new Vue({# e: N# N! i" f) |* l
  7.   el: '#app',  k- S. P# x8 O( O
  8.   data: {( }7 w. \# H; _& O1 P- c
  9.     seen: true; [1 P4 O2 l3 c' X, i1 q+ z
  10.   }
    : G. V; q; t% z' L
  11. })
    2 K7 u) }! z  U; }" C
  12. </script>
复制代码

9 z* c! e: _5 W% l" b9 i( G- L
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">' Z: g' `# A" r3 D2 }, y+ ^
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>- M, D; Y* r! I" s3 }7 B
  3. </div>0 `! K* H2 I0 |, ~# a
  4.    
    % F) n) z9 d2 ~0 B5 c) r
  5. <script>
    5 I6 t8 v2 A- X% J& A1 L; S5 V; Y+ d) v
  6. new Vue({, C# P" a9 C, L4 I
  7.   el: '#app',5 i- F3 i+ g, A2 d+ x6 y3 X9 L% P
  8.   data: {
    3 x0 y& u1 V0 k1 P
  9.     url: 'http://www.runoob.com'% G" A8 c& k/ P& o
  10.   }
    0 m# X$ x+ P: R, y6 v* q/ b6 m
  11. })
    $ p) h0 v, m- {! s, Q* h: g: I
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
: B: F7 {# u( W( h6 E- L1 c1 l8 h
  1. <div id="app">7 d/ u3 D% `6 Z
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    . `1 D8 c( |; J, v' M% x

  3. 8 v  B; ^5 D  Q* F, k
  4. </div>
    : z* f* s* X1 x1 r8 l2 z  F' r6 L
  5. ! _6 A+ a! k1 x: k
  6. <div id="app2">& Z5 B! e( f# ?2 L+ U
  7.    <p v-for="val in arr">- u, w& p" H' y% n2 ^7 w# @5 y  h
  8.     {{val.a}}
    8 z4 z' ~3 u4 C  _" Y
  9.    </p>
    1 C/ s' B3 B& w# ~6 z+ r+ _
  10.    <a  v-on:click="tap">点我</a>
    % q8 P! {+ d  p6 p! ~
  11. </div>* k1 u5 y0 i, u

  12. * t; @% n9 Y7 H( T  ?3 S& g

  13. ( Y2 q# L5 ~3 _6 Q- q+ G
  14. <script>
    5 b# O8 N, r2 c  J5 R
  15. new Vue({
    % G: V0 t4 l) K' d* ?
  16.   el: '#app',5 B' D1 M! p% [1 w( l
  17.   data: {  Y; g0 Q& L) ^) n5 w: p- o
  18.     url: 'http://www.cncml.com'
    & D9 s8 K6 L" ^
  19.   }
    # I) g( y0 ?/ X' a% J/ o
  20. })3 `" E0 m8 R" s* _8 F+ I2 j
  21. new Vue({
    " S  J3 _" j& ~2 x9 s
  22.   el: '#app2',2 H6 \7 {$ ]& O; a+ M8 J
  23.   data: {
    ) I% g0 H  B, S: [% I) J
  24.     arr:[
    8 A4 m" G8 T. Y) A
  25.      {a:'bb'},
      O; |. n7 j9 H
  26.      {a:'cc'}
    ; Y: U/ K0 [8 c
  27.     ]
    # O  {# e4 N5 j
  28.   },
    & ^9 S" O0 J3 R0 ]
  29.    methods:{
    5 r" b+ y, U1 g  \
  30.     tap : function(){
    ; E6 q0 T* @& E
  31.      this.arr.unshift({a:'new'})) d8 a' r3 \6 @
  32.     }
    6 |( _, a+ D. V) i2 \2 n
  33.    }
    # @* j. P9 G8 R. q9 J9 O
  34. })0 V8 i9 P, a9 u8 X7 \& R
  35. </script>
复制代码
, @& Z5 S8 N; h: d5 U. l
) x+ W' {& ~. @/ \) r
在这里参数是监听的事件名。
  m6 n. ~/ \9 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:31 , Processed in 0.079537 second(s), 22 queries .

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