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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10840|回复: 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">
    + k- y. i$ K" W  h, x) _
  2.   <p>{{ message }}</p>* R" t& c; w7 u/ T
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">* w' Y1 C& r+ F$ l
  2.     <div v-html="message"></div>7 Z7 R" X8 z7 |" k$ p
  3. </div>3 \* I/ a( q6 L; k
  4.     1 q; M$ ~8 D& ]# \
  5. <script>: A. U6 g* M: \
  6. new Vue({' i5 O$ A8 E6 [( Z4 y, W" `6 K1 X
  7.   el: '#app',% ?, M: F5 x+ n2 ?* m* x2 m( N
  8.   data: {
    0 g" U; _$ e/ @1 k$ }* }
  9.     message: '<h1>菜鸟教程</h1>'! ?3 L1 H3 ^3 j) e* c
  10.   }+ i1 V6 h2 p2 j* Z! Y/ P
  11. })" z" k( C$ p+ p9 D6 M% g" ~+ s" o
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    & R- h) Q- a; ~% \
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">5 W9 `: \" u- c8 v
  3.   <br><br>0 j. t8 @8 k) J
  4.   <div v-bind:class="{'class1': class1}">/ V4 l: C# N! g
  5.     directiva v-bind:class
    $ r2 m3 X( T8 F+ Q
  6.   </div>0 `& v  ~! s5 Z8 R& ^( d
  7. </div>
    2 i" r3 c) Z! V5 s  b5 f, j
  8.    
    8 [* @1 I5 Y( ]- ^8 N
  9. <script>
    - E1 k! U0 ^* E  y  [- ~, J9 E
  10. new Vue({6 m1 Q/ \& P) K
  11.     el: '#app',7 X! Q7 E1 `. L" `3 b
  12.   data:{) q8 {4 S! j& J) l; v" P
  13.       class1: false
    1 T0 d% o* e( \
  14.   }
      Z! B' i+ t" ^& A: i( c/ D
  15. });
    $ n3 g$ s  q# \' `. W, D" A
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    , n- S' [2 o3 V( E; ]+ l
  2.     {{5+5}}<br>  X  V8 @0 H, M+ j1 E
  3.     {{ ok ? 'YES' : 'NO' }}<br>
      s9 L, T6 n: o; P2 r
  4.     {{ message.split('').reverse().join('') }}
    5 P. Q# R6 Q% x( r
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    4 L1 A6 f, J+ _& n/ F
  6. </div>
    ) \  u3 w' f" v3 x. F0 y% t2 O/ |
  7.    
    " J5 S4 A1 G0 [+ c7 y) \2 F
  8. <script>- T: ^0 Q" Q" K" M6 r8 w# r- Q
  9. new Vue({) I$ C) C# M/ P9 L* Q% e
  10.   el: '#app',7 L8 c$ F& q3 F  o
  11.   data: {
    % Z& g. V: B  \5 @& A
  12.     ok: true,
      O$ u; ~7 {1 u5 B
  13.     message: 'RUNOOB',0 N3 ^' s: {7 e0 t* ?: c2 c. {# D
  14.     id : 1
    6 o. j1 c" |) K, u% \
  15.   }
    + }+ x/ u, z+ V& D2 b% E
  16. })
    % K1 J. |& B: z2 }& t; K3 g8 ?
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
      y1 u% v4 g! q# M. w2 r
  2.     <p v-if="seen">现在你看到我了</p>
    8 n& R6 ]  o1 g8 e" `
  3. </div>4 a# s: @; C' |+ d, ]
  4.    
    $ C0 ~$ y. E: V6 k
  5. <script>
    9 P5 A  t+ s. _
  6. new Vue({
    3 h9 B( w5 p0 [
  7.   el: '#app',
    , L7 Q- ]: ?& Y
  8.   data: {  Q" A1 {8 f( e
  9.     seen: true+ ~0 T3 g. s, e
  10.   }
      |9 N7 D5 ^+ A$ z
  11. })
    " J/ Q7 l$ H% u* I% D1 p
  12. </script>
复制代码
  D7 n* c; o" v1 \2 }4 E4 b+ e
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">8 m" ~$ Q2 f/ _4 @9 i0 H+ I
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>* A% k! Z& b. c1 O  F9 |
  3. </div>
    $ \6 |1 q* b& r8 D& G& f$ E1 W
  4.     ) D( t& [  y* E4 R% U% ?5 M
  5. <script>
    + i7 \2 R8 c4 f+ e
  6. new Vue({
    $ Q! G+ Y- \: P% _' x* m$ D2 d9 t
  7.   el: '#app',
    7 m3 v' ^9 O' G; T
  8.   data: {, V) h5 l5 ?+ W
  9.     url: 'http://www.runoob.com'
    ; J" |# Z+ m8 b4 t
  10.   }2 S, F7 v1 c) Q
  11. })
    # b/ J) X$ R% m) z& }5 V
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
) S( b" |- q( b2 }: w
  1. <div id="app">
    . [' x2 m% I9 w/ H0 v3 G# y* W5 Y, R" B
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    3 W" {' Z! q& a9 ]3 s1 r. C
  3. % t3 M7 a( `5 {" L
  4. </div>8 b* J0 {2 V! j; O9 M$ a/ ]
  5. 9 ^, A; n& o1 p; R! g) [0 ~
  6. <div id="app2">8 A- A7 i! m0 a1 {# \* E3 {2 J9 A, {4 L! |
  7.    <p v-for="val in arr">" Z2 k, K3 [, k3 u( N5 j! H/ t
  8.     {{val.a}}% ^2 h7 b7 i$ ~6 C
  9.    </p>- ~3 t' e: J/ p2 g: ^+ ^
  10.    <a  v-on:click="tap">点我</a>3 P, k1 u! ~+ L3 p) A* X- }7 w
  11. </div>  [0 q( r" h+ ?9 e" S/ k( v

  12. ' i# p  d9 r8 ]: X7 n

  13. 2 m, ~+ M' k! D8 p' Z1 n- M
  14. <script>3 p! `7 M$ E3 \6 e$ T9 k/ X0 f
  15. new Vue({# s. y% A& [7 b
  16.   el: '#app',9 h+ y& M5 ^5 _( y
  17.   data: {1 }8 u+ o# ^, i$ e
  18.     url: 'http://www.cncml.com'% X0 w  V, ~& f
  19.   }
    5 E. f' ~  Q! I# t
  20. })
    5 x6 o: r0 |& r6 ]
  21. new Vue({
    6 n6 J+ l6 s+ r# O$ l, ~. I
  22.   el: '#app2',
    $ C' j: c5 H/ m
  23.   data: {
    3 |/ A& F, k  `- i6 `
  24.     arr:[; |6 J( p3 j  l5 B5 M/ W
  25.      {a:'bb'},
    2 l: Z+ n8 E' j3 l) P
  26.      {a:'cc'}; s( T, i9 i3 g
  27.     ]
    0 y1 B" E2 F( Y
  28.   },6 V& o  y7 N/ [# a2 |0 o0 N
  29.    methods:{
    6 N4 n& u8 x6 w/ {
  30.     tap : function(){
    1 K3 W$ P" ]+ Q* {( J- c& U$ J
  31.      this.arr.unshift({a:'new'})( N6 y5 g( d) U. Y: O3 |
  32.     }* v5 ]% n) |! d1 ]1 r- d4 W+ T8 A
  33.    }
    $ Q6 s3 H6 M0 I- n( ^: _$ o
  34. })1 v7 I) O. A! \! c# W  I& q
  35. </script>
复制代码

( P0 M) h4 D! M, v, ?
$ F4 f* U  \; L4 i8 `! n- f& o+ Q
在这里参数是监听的事件名。

* [6 b$ {* Q. u8 F$ E+ y5 j+ p! _+ q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 12:03 , Processed in 0.126725 second(s), 23 queries .

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