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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15974|回复: 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">
    / Q  @# w9 b% p# Q: c4 I
  2.   <p>{{ message }}</p>( S. Y% T  b' K3 H
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    + p# E: E1 H" A# k1 D' J# V
  2.     <div v-html="message"></div>
    $ [. d9 j' e& c0 N5 Z% l8 |* V
  3. </div>2 E7 M! y  @2 [4 N8 R1 J+ v2 H. c0 L# G6 h
  4.     5 z0 F5 I3 c2 Z
  5. <script>
    ' f: T0 Q. K  {/ {  e* E2 ^6 s
  6. new Vue({+ ]9 l. p: N  b( P! u7 r
  7.   el: '#app',
    ; B1 O  [7 W! D* j; X0 @% g0 y
  8.   data: {
    - s  `+ i+ x" F  ]9 O4 N" o
  9.     message: '<h1>菜鸟教程</h1>'
      Y2 A+ }9 W  g# r0 [# b& I
  10.   }4 k( B+ r8 j, S8 \# N' a8 H. ]
  11. })( O  B: E1 K$ y
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    & j0 W+ w" ?# w7 H; e4 i/ ]- c% V
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    * Y8 m* E* M% u! j# A: T
  3.   <br><br>+ _* g0 _/ y' q9 X7 X: t
  4.   <div v-bind:class="{'class1': class1}">1 A. r0 a" j7 O1 ]
  5.     directiva v-bind:class
    ' b: T5 Y  f1 b- \/ g: u/ d7 c2 `
  6.   </div>
    9 z( n6 B9 M( ~' g# C7 F+ r7 j, W6 O
  7. </div>
    # l/ @4 c! U! _6 L
  8.    
    . @4 x3 o2 x3 N: e: H5 K
  9. <script>4 |/ V! H' B! d
  10. new Vue({
    # V: R0 c5 j% z
  11.     el: '#app',% F3 p' x4 i) G8 M
  12.   data:{
    ' ^: o; N# x2 a) }2 j
  13.       class1: false
    ' o" z" Z9 w+ l
  14.   }
    8 }# E6 f  ^; |6 ^" y# Q% i9 ^
  15. });
    4 b1 L# Q& P) c! q: t9 {' z
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    0 X' g1 {/ a. k
  2.     {{5+5}}<br># e5 r4 ~  ]5 Y$ r9 }/ m6 V2 M1 ]
  3.     {{ ok ? 'YES' : 'NO' }}<br>: G( h; b$ ?  ^3 F  C+ Y5 y
  4.     {{ message.split('').reverse().join('') }}
    ! i, D% L. R; g$ I+ E  f4 C
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    2 v, n/ S1 u3 ^, o1 j$ y+ j) H
  6. </div>9 V* G- [- G# c$ n; A  x
  7.     : S, B, P+ r9 p! c* j
  8. <script>& b8 i4 g3 t+ c
  9. new Vue({$ w: J% `! w5 U7 C8 b5 [2 p
  10.   el: '#app',
    7 e  V8 v  u* j3 h9 \) b9 |& I; x2 {
  11.   data: {: Q2 x, k( `! i8 p' ~
  12.     ok: true,% @% @" O/ E7 M; }
  13.     message: 'RUNOOB',
    . H) C3 m4 I" e7 o* a
  14.     id : 1
    3 Q: P; x& a+ Q
  15.   }
    : t, q! W1 f( B$ x9 O/ F4 z
  16. })$ v' d, P4 i( b
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">8 s1 H+ I! I$ y: X
  2.     <p v-if="seen">现在你看到我了</p>6 S2 Z( Y7 J, ?" F& `5 F
  3. </div>
    # M. B/ O; a8 l! h
  4.    
    " R9 t6 P3 Q) M$ f1 {4 C% x
  5. <script>0 u5 p- Y% n$ n  ?* V& ^' D, P5 [
  6. new Vue({  N6 ?& x' w4 i7 L' f
  7.   el: '#app',
    7 k: W8 @" \* N  E  {, M7 E$ X
  8.   data: {$ p$ d+ ~9 P. a& R1 S( G
  9.     seen: true( O+ L$ C' S7 `! K4 Z2 X
  10.   }
    " t/ K2 Y6 |( M! N; S" Z
  11. })
    6 s: w+ i: C: @1 a" v9 W" f# B
  12. </script>
复制代码

1 l3 `+ l  {4 Q- F3 P, V3 E
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app"># |. H& J& l; Y
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>7 g8 Y5 e2 p3 t) P; X5 Q- z3 J. a
  3. </div>1 |  V8 @" y4 d; Y* j* ]& p
  4.    
    8 _+ h; k# K+ S
  5. <script>' i' F6 I8 Z- S
  6. new Vue({
    . P# A; x  e- x0 K6 z. z# K% _
  7.   el: '#app',
    - R$ r1 }2 \* u
  8.   data: {) |) L+ Y5 c9 e: X6 O% q4 \3 D
  9.     url: 'http://www.runoob.com'
    , N% ?/ I2 p: N" m. h3 U
  10.   }
    ) A0 [$ o) g. w( _4 r2 n% Z6 u1 Y
  11. })
    ' t) s0 B! |+ A* Y( W. L; F( Z4 L
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

" [' K7 [( e$ ?0 ~
  1. <div id="app">
    3 s! I+ ?$ ~3 @. B& t) m) D
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    1 r# L1 h+ f  s; E& v9 `* `0 t
  3. 3 Z' ^3 \5 n9 ^
  4. </div>
    ) g0 `9 j9 C, O. ]3 `  h# \, O
  5. 5 _& ]# E. {  H6 o( j6 N
  6. <div id="app2">/ \% w6 a6 ?( s4 x
  7.    <p v-for="val in arr">
    1 B& @6 j4 a$ f2 B; m5 e$ E$ o
  8.     {{val.a}}( N/ C" u; c3 _! H1 ]+ H0 b/ F
  9.    </p>& M, B0 K6 {0 [2 ^5 y8 M' m# @
  10.    <a  v-on:click="tap">点我</a>
    + I4 w/ b8 c. h3 o3 |
  11. </div>
    + f! ^+ o2 k2 T$ m- L8 ^4 K
  12. 2 K6 ^3 L4 Q. r4 ~; f

  13. : m; z) r0 r  V$ c; o( R/ |
  14. <script>
    " T. n! Z5 ^4 R6 B; @8 l
  15. new Vue({" [& e0 ]; O8 p0 s+ r6 @
  16.   el: '#app',9 P0 V& }1 @* x# \' f# y
  17.   data: {
    0 f/ K+ m+ i1 W/ v- y
  18.     url: 'http://www.cncml.com'
    * b, ]  u3 `+ m8 R
  19.   }
    6 s  A3 C9 _$ _& L
  20. }). z9 [, F) g4 Q  n
  21. new Vue({- O3 t+ A7 O- j
  22.   el: '#app2',# D, d( M/ a# p6 }& J
  23.   data: {% o+ J0 X- ~* \, p# j; Y' y
  24.     arr:[, k/ S2 W$ m! X8 h/ X3 P/ d+ x
  25.      {a:'bb'},. {* I% }: ]5 _( X7 M1 m; c
  26.      {a:'cc'}
    4 G- H6 p) z0 a7 d
  27.     ]4 Z* I) a) o# K
  28.   },# _& |+ x( `  |4 d4 {
  29.    methods:{% g. c4 t4 E- J8 X9 x7 d4 g5 l. h" Y) l
  30.     tap : function(){/ h6 v! C6 @5 K8 M
  31.      this.arr.unshift({a:'new'})
    " i/ ^2 Q1 F, F: Z
  32.     }
    4 v& y* X6 n, v- L3 a' n8 D
  33.    }
    % w9 r0 N# i+ p& h! c6 l
  34. })  v* F& K. Z& P7 p: x* D
  35. </script>
复制代码
' [$ y$ O8 q  y( o6 }
" i4 U  {/ n3 k
在这里参数是监听的事件名。
3 E! k7 r/ P3 G  e+ ~- e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 14:06 , Processed in 0.053081 second(s), 23 queries .

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