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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15018|回复: 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">
    / Z" D# z# ]& k2 W5 E6 ~2 V
  2.   <p>{{ message }}</p>
    & S7 b- J6 K. N# N1 @4 @4 v+ n
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    , M3 Z' g# B0 V" H# e
  2.     <div v-html="message"></div>
    0 x" k0 k& ]9 L& L
  3. </div>
    # O' ]* Z; `3 L7 d1 h  Z; c# }
  4.    
    & v, N+ i7 C5 l* k0 t- l3 {8 l
  5. <script>
    - p( n& m4 O! f8 y# L
  6. new Vue({
    4 W; ]8 K$ C1 n4 j
  7.   el: '#app',
    7 j$ H! [) f- Q" h2 Q
  8.   data: {+ W: o2 ^. Q1 i' _9 Q  e2 J
  9.     message: '<h1>菜鸟教程</h1>'
    ! s6 a) Q3 z$ w$ o0 j& X& w
  10.   }. Q# |" d, C% F9 H' r
  11. })* r' S% X7 p$ i5 u' L6 s
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">2 g8 `% p* x5 C
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    4 Y- d* e7 p/ A+ T6 a( v+ J$ e: h
  3.   <br><br>
    ( b+ w9 ]4 e! ^6 ~6 ]* e$ a
  4.   <div v-bind:class="{'class1': class1}">
    2 F; E9 r9 F5 N2 |
  5.     directiva v-bind:class: L5 V, ]- M3 y: N: z) c+ Z; F
  6.   </div>
    , I! p. Q' Q6 p( r
  7. </div>
    5 s1 O9 P, t' S/ r" \( \8 W2 k
  8.     9 E: Y  v% x8 b7 W1 I' o
  9. <script>
    ' @9 f8 M! h: v% \! j, V
  10. new Vue({+ o  Y" \- _/ k/ ^8 W* O, g; v% T2 B9 p
  11.     el: '#app',( g/ R; i8 o  |! p- Y' @! v
  12.   data:{! H8 J. W1 V* u  {. h$ f7 q# S
  13.       class1: false
    6 a2 ?7 e- V9 Z  I
  14.   }
    4 X. f, T$ f! O0 ]3 ?
  15. });
    % W7 s# D9 Z" I
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">  q0 Q. x+ P$ p9 y: W' E" V
  2.     {{5+5}}<br>
    ! k+ {% |6 ^* x# y1 c$ H* E
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    / Y) ?$ m5 v$ X+ T" k
  4.     {{ message.split('').reverse().join('') }}- w/ m2 E6 {' k8 D5 D, \% [' T
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>! O9 a" K3 @  C. ^0 i
  6. </div>9 e+ y1 f: R5 s( q8 ~% g, J! n
  7.     9 B  u' ?  ]& E+ x; W  J7 R
  8. <script>5 d. j; \# \$ \
  9. new Vue({
    * [9 [6 t4 W" X7 n' |! m' S
  10.   el: '#app',
    . y" B% o; b" g6 m. i; U( d2 N$ P, |
  11.   data: {5 g& M! I7 s) \- x( N
  12.     ok: true,7 d- ^# J1 X7 a9 g, I$ d
  13.     message: 'RUNOOB',
    0 r  x% J5 U7 ^% a+ `6 c% i! Z
  14.     id : 1+ u( X! }0 w7 c7 P7 ^
  15.   }
    6 S" o* Z1 b$ m( }+ ^- o  I
  16. })/ m; r7 ^. k, P: W& t( j
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    * D5 Q! V. G9 d1 g5 u; \
  2.     <p v-if="seen">现在你看到我了</p>
    % f- K- E8 {7 K) R# G2 e
  3. </div>) [' H/ P4 M6 O; ^4 @9 |! {
  4.    
    / c  [: v5 n% x; O
  5. <script>7 @; T6 j* p  e. a3 w
  6. new Vue({1 A; m% k, k5 Y5 ~& |5 n
  7.   el: '#app',
    ' P6 }3 b" c- l7 T
  8.   data: {
    * I( n7 u4 r' L
  9.     seen: true
    5 b6 Q6 z% M! }# g
  10.   }
    3 L2 |0 d) o8 j* A5 p: V
  11. })# E( }. g( g8 C! p, v) E/ M2 i) [3 `
  12. </script>
复制代码
6 c0 y7 i$ C+ F7 h8 [5 d* H: d% k0 j
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">- I) k# y; x7 x
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    . `, `2 c5 z# Q1 S5 E- q6 d
  3. </div>1 l, O0 s9 h$ h% r4 N6 t: I
  4.    
    & B0 t, ^5 a% E3 }; ~, a! L# N
  5. <script>
    - t0 p3 l% b# t5 P0 ]3 x/ q6 ?& C
  6. new Vue({3 L0 }  m6 T6 m) Y- ?) Z" ?2 g
  7.   el: '#app',
    , J0 Z6 Y4 O& _+ q1 D( ~7 U
  8.   data: {
    / T/ Y7 `% o" M7 G
  9.     url: 'http://www.runoob.com'# \# X: {; y5 j  E/ [' i  e
  10.   }
    6 Q# v, U4 o3 s, r# X5 o
  11. })2 O( H9 o7 [. J) s6 M
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
8 e7 E  B: B( q
  1. <div id="app">
    6 ~. `1 I9 [( W. d* V. Y. t3 {+ K
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>. ^; Q! y2 u7 D. H, o

  3. 4 f4 Q( |, d7 E+ m8 ]& P
  4. </div>
    - g4 ~# t) D1 S

  5. 1 C6 n: S, e1 r7 e  b6 A6 m% |% L$ w
  6. <div id="app2">
    9 s0 W1 F" D0 \( w+ S
  7.    <p v-for="val in arr">
    6 {; g0 S9 ]7 n2 X) ]4 ?
  8.     {{val.a}}
    ' h3 l; T& p4 m8 ~, o  p; `" u
  9.    </p>
    5 t+ ]# Q5 E- }; d, ?! A
  10.    <a  v-on:click="tap">点我</a>
    9 ?& X' J  t: ?* }) ~1 G
  11. </div>- q1 C+ ]' _: [& b* W% D5 D6 N

  12.   Y7 K" `7 |  u/ y0 |

  13. . \0 A. x& z3 q9 |- b" `
  14. <script>
    1 }. z5 a6 y* j' a
  15. new Vue({
    % C& p' ~2 [& v7 E; Z
  16.   el: '#app',, u# i, p5 t3 S6 e5 K: _
  17.   data: {
    ! [8 d0 s3 v3 Z, {  d, B( ?" z- I# ?
  18.     url: 'http://www.cncml.com'6 j  }1 P; o2 b) z+ x! p7 Q/ z; i5 w
  19.   }* P9 Z' N' O+ L6 A* n. x
  20. })
    9 t* u. a' w' y* W  [9 N2 T: \
  21. new Vue({
    & d8 j7 s" Z7 M  P
  22.   el: '#app2',
    5 u: E% n" ?  |
  23.   data: {/ _/ J; A, h4 C5 B" }+ p! ]( g
  24.     arr:[  u1 O" L* m( g
  25.      {a:'bb'},; ?2 y  G- B# m2 b" G
  26.      {a:'cc'}; C1 Y' `: _% x. P9 g6 X6 b
  27.     ]* A- X# c+ j4 X/ e0 B8 P
  28.   },5 b$ [1 ?& J/ C$ l/ w- V' p
  29.    methods:{
    $ k/ l4 x) {, {1 z
  30.     tap : function(){6 w5 |. a" {( B  L( ?, `
  31.      this.arr.unshift({a:'new'})5 s+ \4 B( a: l; Z9 }8 p1 w  }; s
  32.     }
    * G! }2 B& a9 g
  33.    }! t  A: ~8 s5 U( e
  34. })7 n1 L$ d& [/ T' C3 B, z
  35. </script>
复制代码

, b( _8 r5 L7 W0 l3 Q

  n: A9 t/ I6 L: q4 h: ^; n
在这里参数是监听的事件名。

/ ^$ z/ U% C6 f- ~/ |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 21:49 , Processed in 0.064901 second(s), 22 queries .

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