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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12463|回复: 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">5 R+ v  W2 x4 ~+ S! a5 f
  2.   <p>{{ message }}</p>8 q' S+ A* y( ]" ~2 T8 ^
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">( H1 `* C; L; x4 t$ ~) [4 s
  2.     <div v-html="message"></div>
    ( t6 H! Q# j2 b/ S' h
  3. </div>
      F9 r; O  F0 D) R
  4.     * w" |2 M; n4 J9 L: J$ t$ |$ F
  5. <script>
    * n- R, t8 E2 E
  6. new Vue({6 R: U' ]' n$ Q' I' A, T
  7.   el: '#app',
    3 F; n! r6 T- s7 J, s9 I, @! A
  8.   data: {
    ' j+ ~. c" v2 J
  9.     message: '<h1>菜鸟教程</h1>'0 d& H/ g# f; l4 G' D9 @
  10.   }
    ' r! g3 B1 z' T; \
  11. })
    : ?2 a, R1 M+ e) B0 ~8 K
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">% |7 I' B8 u5 W" y4 h" ~$ y) E1 T
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">1 U" ^6 i* h7 p2 _% D
  3.   <br><br>
    5 Z3 v. q! \  F" @6 `  B, Q% q. [
  4.   <div v-bind:class="{'class1': class1}">: A* s) t4 b# G) |
  5.     directiva v-bind:class( k, h* [% B; I  Y
  6.   </div>
    , y6 O+ ]  S  e  i
  7. </div>
    5 z% |! w8 }* G* I( u1 p0 _: o: ?
  8.     ) ~, H0 o: r% @2 ^0 L
  9. <script>
    ( N- ^/ h0 Y' M# _7 v
  10. new Vue({
    ( E9 _8 B5 w8 t5 ^# Y# ]9 n0 }% T) `
  11.     el: '#app',) K' \& d+ K% O' Q& t1 t# j6 w
  12.   data:{1 p! K& ?7 S4 L2 v9 r0 r8 i' y
  13.       class1: false* i2 h8 `8 r7 A" `, G
  14.   }
    % w) o. X4 D2 y
  15. });
    3 G4 r  ~) p( h% q' G' Z; f7 n
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    4 Y, S7 X4 I' q, O
  2.     {{5+5}}<br>( V1 u8 p. Z1 u
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    ! v& E" q" @+ M0 I
  4.     {{ message.split('').reverse().join('') }}1 D' B( s' x8 `, [! o7 n# v+ t8 x; t
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    ' ?* f% O$ Y2 G0 a- B' j7 q
  6. </div>% M2 K. k  L2 x* l: u) i% m
  7.       k& ]$ z+ E6 {3 W1 E
  8. <script>1 z! U# ?2 P; j, C' Y2 c
  9. new Vue({
    6 Q( }# [& a4 p9 ?2 Q. l
  10.   el: '#app',; h8 W8 ~2 t/ `" e: m% ]
  11.   data: {$ L+ d5 v7 {0 k3 e5 c. `" k
  12.     ok: true,
    : N$ }* j9 G0 Y8 J1 l) t& N+ [
  13.     message: 'RUNOOB',& K7 ]+ }$ W* [* X
  14.     id : 13 h( y& p# l7 t1 w7 e
  15.   }
    ! ]' a' @0 H) D' @, R, T  s' v/ P
  16. })
    2 a5 J; X) D, w" B) j, j# q" D8 N
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">3 _" F; e# A6 A5 N" N$ M
  2.     <p v-if="seen">现在你看到我了</p>8 k- @4 ^5 d" f- z: a
  3. </div>  B: q; \) ?& \) F8 p
  4.    
    7 u) A9 P; b2 X8 c0 I* f
  5. <script>
    . q5 ~; e# Y" i0 ~* q
  6. new Vue({) [8 z, A9 {( B# q% s9 a8 N
  7.   el: '#app',
      \- o! a7 `# q4 e( B
  8.   data: {
    - [3 \1 i0 h: h" V3 B
  9.     seen: true$ E( q; `! ^$ m  C
  10.   }
    6 v* S' W. B( s/ z- c/ E
  11. })6 h8 D4 u" }1 i8 q
  12. </script>
复制代码
' J& l5 Y1 R$ N
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">% E5 K# T8 ^8 |, |9 l2 s
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre># q( e9 X) W  Y; J; R' i
  3. </div># ~9 B# g7 Q9 |' {1 h
  4.    
    ! ]1 k) e$ y, j0 O4 |4 Z3 L
  5. <script>: s# E, o, p' j6 Y- ]. q9 Z8 n: B7 M
  6. new Vue({- v: ~  r  {4 M) g) q. ]- n
  7.   el: '#app',
    8 \- S- Y* T  f3 Z3 l. ]8 x6 j$ r
  8.   data: {
    ) L1 J+ b1 o. Q
  9.     url: 'http://www.runoob.com'
    6 P% }. V: [) _- V$ [( ~( x2 H
  10.   }
    / ~2 n, L, @3 x7 d( y! n
  11. })
    2 ~0 b' S( {0 j! k# R& l
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
* d4 _6 _. y6 d# K- ?$ A
  1. <div id="app">
    ) V, ?' z$ p, P! _% I( C' t. g7 S
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>% ^+ h: x  \6 A3 R" Y

  3. : h: Z5 `" Q" u6 [7 q" X! b+ a+ B
  4. </div>
    / h) i0 v' V& {, v

  5. 6 }* V% O& U; Z# k8 o
  6. <div id="app2">( a( V% b9 K8 ~  p8 j2 s
  7.    <p v-for="val in arr">
      @: F- M# ?0 a) U* h: h2 ^' J
  8.     {{val.a}}
    - j( C/ L0 s4 d+ t/ K: e- C
  9.    </p>
    # G8 c7 t  i7 l1 H3 f4 x
  10.    <a  v-on:click="tap">点我</a>
    + d# N; O/ z6 S" o
  11. </div>: n4 W8 K. x$ z2 H6 n! `0 x

  12. * e6 J2 Q: A- I( _& n. f; H0 P' u! S* }
  13. ; h  @2 B( a5 D! Y! o# Z/ g
  14. <script>! v- N9 D  S6 Q4 d# G$ K/ f1 y
  15. new Vue({
      R/ Y7 V$ F# n% p) D2 m
  16.   el: '#app',3 S& p! Z/ _" I
  17.   data: {
    ; k; `5 x  x3 D; |" L
  18.     url: 'http://www.cncml.com'% w7 @: |" e3 ?' B1 r7 c, d6 e
  19.   }/ M! }; M+ w+ q* n0 y3 a" U5 E
  20. })" u) Z0 T$ t4 z! m
  21. new Vue({  M! p, B+ ^' s
  22.   el: '#app2',; P6 @1 R; b' y3 b* B- D, B
  23.   data: {% i$ k- D! F0 g, g* I
  24.     arr:[
    $ k/ t2 [$ F: T2 N; n1 A
  25.      {a:'bb'},
    8 Z( k: P3 \4 X6 o; N$ q. D% m7 r
  26.      {a:'cc'}
    + [8 K& p0 N1 c4 P2 |, Z+ ^+ g3 D$ V
  27.     ]
    # l3 k$ p7 ^( ?4 r7 [
  28.   },
    - E6 ~3 o% Q7 G% k' `
  29.    methods:{
    * e+ m9 p/ {& X* c5 C; X3 w$ z2 k
  30.     tap : function(){! [) V' z) _& }
  31.      this.arr.unshift({a:'new'})
    0 @8 }9 q$ B$ O0 z$ m9 j  w
  32.     }6 t' j3 H0 r' E7 }& o2 K
  33.    }
    2 A, t2 {. V* o2 p8 I1 }
  34. })1 f; o% [; W/ R$ z! [: k( e: R
  35. </script>
复制代码
  m1 N/ _% ]$ C& a! C
& ], M. B2 i1 X( h
在这里参数是监听的事件名。

1 c3 }0 i3 F3 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:21 , Processed in 0.114250 second(s), 22 queries .

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