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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16498|回复: 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">6 E9 Y! G4 ^% n3 G+ |. _, j
  2.   <p>{{ message }}</p>2 k# x8 y' y5 m$ N& M1 x/ o( v
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">, J8 n& k5 p8 }) d
  2.     <div v-html="message"></div>. G% a+ p2 K( o# f% U$ h
  3. </div>
    7 W+ ^. A+ ^  S3 C
  4.    
    " i2 Y: K0 a' g8 m7 B- S( H* W
  5. <script>3 ]4 H& D) Y1 b, J
  6. new Vue({: l* E& R# ^* N. p( @; @
  7.   el: '#app',
    9 |8 t& @* t# p: J; l
  8.   data: {- I9 W  V" G% j# u  [
  9.     message: '<h1>菜鸟教程</h1>'
    & Q, Q+ Z* }- V" U- `
  10.   }
      i: L( A7 _& k& m
  11. })
    7 t; Z6 {- [7 v5 h
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    : g$ K& b9 d3 W+ _
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    : ]; T* q& g, u) r. F1 ~5 C
  3.   <br><br>( Z2 v7 J5 y+ C: U
  4.   <div v-bind:class="{'class1': class1}">
      q! S* a0 N6 V# V- k
  5.     directiva v-bind:class
    0 K' b/ n" _3 h5 I* P
  6.   </div>& r/ u. c, Z9 _( a
  7. </div>8 D6 I+ `/ I  f+ {1 L
  8.     3 p: Q& G# A, M5 ~4 R! j
  9. <script>
    ( t7 c: x* x" a- f
  10. new Vue({# q# b5 P- {. M  {  Q& h
  11.     el: '#app',7 d7 ]! n( d* a0 E# \
  12.   data:{; |6 R8 |0 t# i* z$ f! n; [
  13.       class1: false
    2 o3 Q. S; T% l6 H/ V/ _
  14.   }
    5 v! r2 |2 o  Z
  15. });
    9 L  i$ d& \& [2 O8 e4 R
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    0 B( s# Q' S- |( ?" J& ~
  2.     {{5+5}}<br>
    $ @+ d4 \( ^& f3 V4 R4 l8 [, i) Q
  3.     {{ ok ? 'YES' : 'NO' }}<br>9 e( B+ F, ]% ^2 z# v
  4.     {{ message.split('').reverse().join('') }}
    $ @: m9 x. N; |2 o
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    , p) N$ o# U& _! o; w. }
  6. </div>& l  V- G% R  }  i) m
  7.     ) B/ Y0 D' A0 I- Q5 U
  8. <script>
      d; h; b7 T$ s
  9. new Vue({
    % M) m1 l8 |$ Z# }% x- D; M$ M
  10.   el: '#app',
    * l0 h4 e9 U5 E0 H" {% [! Y4 A
  11.   data: {% H9 Q6 T8 X0 j/ h1 X
  12.     ok: true,
    & X' g1 A7 p* z8 t
  13.     message: 'RUNOOB',6 _1 o# I; G3 n, N' S
  14.     id : 1
    - ]6 s% V/ ]8 Y+ U
  15.   }
    : D  U  W" b" D9 W4 N
  16. })
    1 @4 t" O7 o5 a
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">  T- E  C( w$ d; g3 p& {! S
  2.     <p v-if="seen">现在你看到我了</p>
    3 v6 Y0 g( q! q( [
  3. </div>+ ?/ A2 b  T8 r
  4.    
    : \( Z2 |: U4 z) {- l1 I
  5. <script>
    0 c8 |& G$ p, Y0 [+ z
  6. new Vue({
    5 ?7 y; w& m8 G/ ^
  7.   el: '#app',3 k. K( {" @7 D  J) ~/ ^. a
  8.   data: {
    3 s$ V; k! X9 B/ \  ?
  9.     seen: true
    5 X3 ~' \3 V$ r5 Z8 V
  10.   }  d3 O2 W1 P# o. I! _" E  g
  11. }), v4 H) _8 r  ]/ `
  12. </script>
复制代码

2 J, x7 a1 T+ t8 Y4 x) L
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    / M& t8 d0 i/ H  M" t/ Z. [
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>0 y: _1 ~2 G/ a2 S5 U# ]
  3. </div>
    2 `/ U" A4 o$ q4 Y+ ]
  4.     - o' _9 L+ q/ P8 z4 x9 ~
  5. <script>) J2 I9 C; J1 e; ^% g7 v
  6. new Vue({. C. G& b' }4 G
  7.   el: '#app',0 a7 O8 h( r; X* t
  8.   data: {: Z; p0 E# x+ ?, `
  9.     url: 'http://www.runoob.com', R) m! G. o% D. ?/ v1 n
  10.   }) }. K/ b/ O5 }% D
  11. })
    0 k  K# I+ x+ A3 o; ?  B
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
) C, r0 z7 n1 t" B  n8 B1 I
  1. <div id="app">2 k! r: X* [3 V
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>) |; {3 h7 P2 J0 O

  3. / Z; _' d' a* \: ~1 \
  4. </div>8 U9 |) Y6 D" W0 g* Z) m
  5. # w( d, ^. o$ y0 _0 }0 X
  6. <div id="app2">0 S( f( F! S& d* |: s4 _
  7.    <p v-for="val in arr">
    ) C/ w- b% b' d* R
  8.     {{val.a}}
    2 n4 r, X; E" V0 a  f- U9 r* o) x2 H
  9.    </p>
    . @. j' [$ @+ K' Y8 H/ e+ ]
  10.    <a  v-on:click="tap">点我</a>* F% J  R7 J4 c) L) C: t& }
  11. </div>
    . s5 x/ K+ g/ p0 Q( H; i
  12. 0 B3 [6 p( k& U

  13. + O3 e2 h3 N* w% w( y, b
  14. <script>% p* v# P6 ]) X  i
  15. new Vue({
    ; n0 t' v0 j" A3 }
  16.   el: '#app',3 Z: s/ K; L. `
  17.   data: {
    + g6 ?! G1 v/ M& z# j
  18.     url: 'http://www.cncml.com'1 h" w6 ^. x2 n' \
  19.   }: f& R! ?& V  r, q# C9 S
  20. })' ^% |: I& H( b# B" j
  21. new Vue({
    - _. N- k+ w0 \3 C9 i2 F
  22.   el: '#app2',; v. G' ]  a$ |0 y$ m2 N8 A
  23.   data: {; n) a$ }" ]. Q, k& x7 W! R
  24.     arr:[
    % M& v9 [# H4 w* [% Y
  25.      {a:'bb'},: r8 K- F9 v6 A, }! `" ^0 b
  26.      {a:'cc'}% p6 @0 C. a4 m& u: O1 K, b
  27.     ]( ?: P* ~+ D4 D: C& C/ c
  28.   },+ C' g7 v9 L/ q1 G
  29.    methods:{. ]# ]0 ^9 Z( D
  30.     tap : function(){9 |! G/ V- z0 Q8 G
  31.      this.arr.unshift({a:'new'})7 e3 X" u! t6 g
  32.     }
    + T7 V6 S6 @) A5 P  Q) B' r
  33.    }
    1 I+ `+ }' i7 T4 o6 B
  34. })
    - H2 c' r* q/ K+ U6 z( [4 D; w8 E
  35. </script>
复制代码
2 A4 }. E8 L; N, Q- o

) m0 r! [$ I! @4 |' F
在这里参数是监听的事件名。

$ y: p( j) `& M2 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:12 , Processed in 0.074641 second(s), 22 queries .

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