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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15526|回复: 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">) U3 f* P1 O. ^
  2.   <p>{{ message }}</p>
    & b2 x) y- l2 |" Q6 P# l! s
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    / C, r( C# h+ B# H
  2.     <div v-html="message"></div>
    # u& U& j  W2 _
  3. </div>
    ; |# v7 m% `6 S# J8 U5 B
  4.    
    ! w; Q  ]3 ?3 n/ n3 O* O
  5. <script>
    % o6 X' f# \9 ~8 r( T5 A
  6. new Vue({. H# k* o% o7 M6 H
  7.   el: '#app',; I  L! p. `2 X  x
  8.   data: {6 ]7 C  ?( ?5 S
  9.     message: '<h1>菜鸟教程</h1>', c6 \  C$ d0 l
  10.   }% A3 f" x  G6 ?7 s
  11. })
    . |, ~: D  O- q0 m1 p) g" X$ x. G0 A
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    ' z5 H5 ?7 u- S: u: z
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ; h, T# I0 T) r0 X& h( {5 \1 S
  3.   <br><br>
    0 y& }% ?+ G5 W7 C% p6 S7 f+ \7 |
  4.   <div v-bind:class="{'class1': class1}">/ }5 o8 q( _+ H4 t% e7 A" t* G
  5.     directiva v-bind:class
    - X/ Q3 ]8 p/ i: n
  6.   </div>  V* r8 p! M9 h' f8 m% w- X: h; N
  7. </div>9 [' |2 A! P, _6 e
  8.    
    ' N, I5 a: P% _, T0 a1 l! d
  9. <script>
    1 I5 U3 [1 Z; d
  10. new Vue({
    6 ]3 H3 G1 {* K$ F6 D: f: i7 l2 t
  11.     el: '#app',
    ) D9 \  j# @  f1 s2 B  q. F+ L
  12.   data:{. _" j+ C! ]6 m+ n# t# Z
  13.       class1: false/ T  X7 D1 e# d
  14.   }
    8 ^& ^- M6 P+ v, ~
  15. });
    ; k: R% F) Q; I$ e4 y  q! t
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    0 l: P& j" ], R7 K' X3 c
  2.     {{5+5}}<br>
    / F8 u& U0 ?- M+ i3 C' N
  3.     {{ ok ? 'YES' : 'NO' }}<br>8 o; n' U, H  X0 j9 c: Q# h& g' v
  4.     {{ message.split('').reverse().join('') }}
    ! g( R. t) {5 k4 h7 i6 Y1 R
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    9 O% J* ?8 G, g, h2 ?5 ^# y( g
  6. </div>) Z; o( _6 M# {7 f3 ]2 f
  7.    
    5 I; n( K# `' Y4 Z
  8. <script>
    3 I8 [: f1 }' e/ w
  9. new Vue({  D$ x4 m1 t9 `; v+ ?" [
  10.   el: '#app',9 \, j  C. u: ?5 y7 u( p
  11.   data: {' p/ H# i7 u# e: N' D0 w; y- T
  12.     ok: true,
    4 W, q8 j3 f/ M9 m% Z
  13.     message: 'RUNOOB',
    7 p' D3 |/ w  F+ F+ }
  14.     id : 1! r8 v' I% g, e/ Z3 Q# {3 Z
  15.   }
    * [$ S# _$ [9 T; k) t% u
  16. })
    & x+ ~0 c/ p3 M2 s5 i+ J
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    : y5 @$ k6 \' L, D1 F
  2.     <p v-if="seen">现在你看到我了</p>
    3 U6 G$ _1 J3 Q# L
  3. </div>  h( H+ @2 i* h+ Q& r2 N
  4.    
    - F) v6 X+ l! n9 _* F3 d5 i
  5. <script>, M. L4 t0 G9 _
  6. new Vue({3 \! g, q8 Y/ Z) T% G8 C9 R
  7.   el: '#app',* n- s8 W+ |9 W2 v$ N
  8.   data: {
    - r8 J0 M7 Y) u9 j- R0 O1 K
  9.     seen: true
    / |( C9 C; r9 L" L
  10.   }
    . U8 A. z& E. f% G  }
  11. })+ {3 |9 n% T+ F6 F
  12. </script>
复制代码
5 _8 }# @& w% ^, x
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">' }  w7 Y: c. K, q) C2 H4 x' }1 Z' ?
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    # t/ z  W+ f9 m* g# d! R
  3. </div>
    ! b! ?/ X% R# p/ }- {$ x
  4.    
    ) q5 V+ R* C& }1 N- p: |0 W
  5. <script>) I6 G' t  N2 U1 n; Z/ R/ \
  6. new Vue({
    & W' t+ h* ~" E/ E# q2 X6 ^6 N
  7.   el: '#app',
    / m+ b7 I/ O- y
  8.   data: {& y4 T' g2 R; A
  9.     url: 'http://www.runoob.com'
    & e. C: B; G. }6 d  G  u
  10.   }
    4 w* a* b$ N7 n/ ~; p3 X+ k% F2 ]
  11. }), v& b, _7 s+ l* d
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

& @1 c! s9 ]$ r; L: A5 O, k4 H+ g
  1. <div id="app">
    - u  D9 |1 E  d8 _6 t: d
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    ( f- T' {4 N; D3 [1 Z

  3.   ?9 s' }0 [! w, |
  4. </div>( y) `1 h- o" p

  5. & D6 e- h" b5 c$ h7 x$ e
  6. <div id="app2">2 M3 A' v8 f/ u5 Z$ e5 G
  7.    <p v-for="val in arr">/ F* x/ ^2 I$ D- f( o
  8.     {{val.a}}
    & ^- Q5 _  j' c' F: r
  9.    </p>  p# i' O8 K' Z; q9 ?6 W4 M
  10.    <a  v-on:click="tap">点我</a>
    # s$ m) B2 p3 n5 ]' y
  11. </div>- `9 w) l  ~) Y
  12. : t' e# \3 p+ X2 }

  13. ) m0 n* O0 Y# d/ b
  14. <script>
    7 o( {" ^9 d% V3 T4 W$ L
  15. new Vue({: p- `( A7 ?# W
  16.   el: '#app',
    $ l" X2 \4 |" e  |. m
  17.   data: {
    9 p3 C/ p$ l) y5 q7 ^
  18.     url: 'http://www.cncml.com'& u8 b3 j6 R. I- G4 I; p4 O
  19.   }
    + m1 i+ Q3 w3 w7 T
  20. })
    ! u1 p& ^4 f4 |
  21. new Vue({! h. W3 M8 g: w2 S' e) z
  22.   el: '#app2',* s- K- V, n" i" N4 Z" w2 h- S
  23.   data: {! n* n$ ?* N6 @! x% x( _( o) H3 U/ O
  24.     arr:[; K, _1 ^( k+ V5 C9 ~" s
  25.      {a:'bb'},
    ( w! k3 U- W% ^7 i2 T2 Q* ^' }
  26.      {a:'cc'}: W0 S& Y% G% \
  27.     ]
    . L6 C8 S  |7 v0 a0 t
  28.   },1 A4 W4 P- \+ {, ^# w9 ^7 @
  29.    methods:{
    3 N! z% X2 V2 ?1 j8 i! w+ q5 o" Y
  30.     tap : function(){
    8 ^1 R1 n% V1 U, [; X  Z# \6 r' ]2 b3 u
  31.      this.arr.unshift({a:'new'})6 V6 C% T! [0 I1 P
  32.     }
    " F4 Y  @9 I4 ~- c) N
  33.    }
    & L7 b1 m2 L2 W0 q) t- W
  34. })4 @, Q4 D! G5 s6 A
  35. </script>
复制代码

% A5 _/ A9 f0 r" F3 t& p) E
2 N( O9 n- P) M
在这里参数是监听的事件名。
# {- l; P& h2 ~! F, ~$ _5 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 01:53 , Processed in 0.067763 second(s), 22 queries .

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