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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15961|回复: 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">
    : j) s4 `# |6 x' p& L/ I* [
  2.   <p>{{ message }}</p>, ^. T2 B6 H6 U7 P
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">8 W6 E$ S: m! g3 X! P9 h
  2.     <div v-html="message"></div>8 X6 R* k- v; q+ z
  3. </div>7 H7 P7 n; L6 A$ i; m5 U0 W* M
  4.    
    6 X- ^, b9 x. \* Z' C$ E
  5. <script>
    . V$ _+ `8 f5 y& c4 n7 B
  6. new Vue({4 p, R& c0 a  P2 r- K
  7.   el: '#app',! q1 E# R! i" K; f$ R8 H( [
  8.   data: {$ N7 R* {$ ^" F+ k' ~" f- j
  9.     message: '<h1>菜鸟教程</h1>'
    # v! M3 w) G4 e+ z( N
  10.   }
    , b' V/ E/ A, i
  11. })
    & r7 R# O4 i* E4 |8 _  ]" C" r
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    - x8 ?- L* {: A9 B
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    $ }) A4 K- @' m; {2 c
  3.   <br><br>
    $ I4 z  @: ^, g; ]
  4.   <div v-bind:class="{'class1': class1}">
    8 Y- J$ p9 N0 @
  5.     directiva v-bind:class; j! W" Q8 V. E
  6.   </div>
    / ?$ M4 ]! T5 J( k7 v5 @) n
  7. </div>
    ) K+ q; O; V+ k
  8.     " `# b: A" F( {0 F, O. |
  9. <script>& K8 R+ A, _4 c& G, v9 r9 r9 z6 b: D
  10. new Vue({$ p8 X3 g( x+ y: T
  11.     el: '#app',3 c5 c, c8 k5 D% O; b, {& i. y0 \
  12.   data:{
    5 S# I: S8 [* \; U3 Y, x8 g1 ^
  13.       class1: false
    ) H: T* t% v: O1 ^; K$ N" L% V6 C
  14.   }
    4 k" B- F: s$ b+ `- O
  15. });
    ; o2 c' E. n" I! Y  M
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    8 y* k5 _) m9 U
  2.     {{5+5}}<br>$ ]% T& W1 P( N9 d
  3.     {{ ok ? 'YES' : 'NO' }}<br>' m1 ~( I7 L9 {/ B/ D' y* [3 o+ G
  4.     {{ message.split('').reverse().join('') }}
    $ ]) S5 q( N% f) K5 b$ H+ u
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>' H. @+ [. w- N1 u0 F
  6. </div>0 t3 X& S4 ^9 d; R. a6 E. ~
  7.    
    2 g' g- o& w0 P- z7 `  V4 k
  8. <script>
    2 ]+ i' C3 R9 _- }; o
  9. new Vue({
    ) q* C5 l2 Q- e! g
  10.   el: '#app',. A, H9 {& _' p) l( E2 J. A9 q: i4 ^
  11.   data: {
    & V) ?$ v8 X/ w
  12.     ok: true,
    : \4 r7 Y: b! }
  13.     message: 'RUNOOB',
    7 M3 |; S: q6 B( p, t1 Q9 T* O
  14.     id : 19 U& |: U, N/ A" I
  15.   }
      v1 j- M7 \3 C5 F
  16. })7 L( I5 y  i' d
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    7 a8 j6 d/ }0 E1 Z. h
  2.     <p v-if="seen">现在你看到我了</p>$ m" ]) ]2 q3 B5 u
  3. </div>
    " F. K- M& p! j2 R' C/ X& L) [' b
  4.     ' t% B7 ^, c8 X" M& `5 E
  5. <script>
    ( h3 n( x$ e4 e3 O& Y
  6. new Vue({
    5 P& c6 j7 z9 c7 ^# |
  7.   el: '#app',
    - g+ F' I4 O  R: e) n3 [7 Q
  8.   data: {
    " K/ W7 e8 F" V) n
  9.     seen: true1 t% C5 k$ e0 C
  10.   }9 K, z; d1 q! z* o
  11. }), s+ ?3 l; |0 I
  12. </script>
复制代码

. n  a8 |( X. ?# b6 q6 K
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    9 |: I1 H" Y) r  Z
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>+ H5 L: {1 q* J, N% Y& L8 m
  3. </div>
    ! _8 B. f* j# p" {; d2 W" H
  4.     . ?$ u# c6 Q! l% p$ ?% ~
  5. <script>
    9 h6 C2 l% V" Q, x
  6. new Vue({# a) i2 v/ |; k0 ~& C
  7.   el: '#app',
    6 Q" c. p9 I' V* F) R
  8.   data: {
    6 J3 v( o( B- k+ D+ f& m
  9.     url: 'http://www.runoob.com'& j7 [8 F0 ]: j/ f3 F3 b' y4 p7 G
  10.   }
    0 I# x# `& x) K
  11. })
    ! h0 w. R5 h7 E& g$ D
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

2 S$ p$ w, Z3 n1 i+ j% K* K
  1. <div id="app">
    & V5 J4 @) v* X1 }6 h4 ]; `4 U; _
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    * T; z+ P2 C. A2 L( v/ a, j$ r
  3. & \4 A- `9 y& W0 p/ {
  4. </div>
    / n+ Z' L$ E7 a1 P. F$ _% q/ R

  5.   C7 M  ]6 V: A, h; `; q+ Y) `
  6. <div id="app2">3 F$ `) Y* ^! X+ M. K6 m) c
  7.    <p v-for="val in arr">/ P" W& F1 i- J; ~5 X1 T7 S
  8.     {{val.a}}! ?( d2 C6 n( t2 q
  9.    </p>5 J! ?+ k6 D3 W7 t5 e% x* z5 f2 }3 Q
  10.    <a  v-on:click="tap">点我</a>+ e: t9 j" G! P3 s
  11. </div>) ]4 f0 I4 [7 r- }: J4 a

  12. # D/ j) G. }& T4 w9 T) I

  13. 5 u9 L/ X+ X' H! s
  14. <script>2 K" x( p' p6 Z& M
  15. new Vue({
    $ l- {5 @7 v& V: u& I7 o$ R
  16.   el: '#app',
    7 b% O$ |2 j8 z. Y& F# @
  17.   data: {3 R& \% t9 [& l" s3 Y& |: m/ ?
  18.     url: 'http://www.cncml.com') }, \) U# R, a' S; E+ @
  19.   }0 q9 G) O3 ^; @8 p$ F5 E
  20. })
    # g' q3 F1 W$ }5 p  ~4 u" p4 `1 f
  21. new Vue({) g" ]2 Z# A* P& W4 R/ u* L
  22.   el: '#app2',- g( a" e& a9 n
  23.   data: {
    . X) t* b' I8 U. q/ h/ Z, K  \
  24.     arr:[
    ' m& w6 j1 o/ P6 J. a3 X
  25.      {a:'bb'},
    0 `% H/ f  P' u, y5 U, ?
  26.      {a:'cc'}
    5 p5 i  x, v2 B% C
  27.     ]
    " Y1 S, z- F# v% J6 n: Z+ f: U( Y
  28.   },; v* U; `; c/ u+ j. b- D: M
  29.    methods:{  h% X% u* ?. P7 a4 N; b
  30.     tap : function(){  b3 a6 q* Y0 ~$ j
  31.      this.arr.unshift({a:'new'})
    ' p0 H  ~, y: ^7 R
  32.     }* |: }0 i. @4 B* `8 l: F" [
  33.    }; N1 l' _" c, B% c2 }
  34. })- R: O6 S* w: K4 x  p: v& A
  35. </script>
复制代码
) F/ u$ A5 P  j

9 |6 {4 l/ ^7 Y" r
在这里参数是监听的事件名。

8 X3 t: }( h& N( A1 r: i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:12 , Processed in 0.085222 second(s), 22 queries .

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