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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15309|回复: 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">
    # f/ W2 v% l* i
  2.   <p>{{ message }}</p>0 h. X2 W; z2 M0 w& A* ]& f
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    * ~' e( W( `0 @
  2.     <div v-html="message"></div>
    + b0 @0 G1 [, w8 r: i% E. U
  3. </div>8 V5 Z1 P' Y. `& [! d' l
  4.     7 Z2 |2 c4 M3 e8 E
  5. <script>& D# R* r2 F7 H5 D9 Q7 O; e
  6. new Vue({: g" ?) p: a; a1 u# d# e
  7.   el: '#app',
    : d0 y' N& K' F
  8.   data: {: T$ A) _3 x4 ]9 S* D
  9.     message: '<h1>菜鸟教程</h1>'
    " e: c" |. V+ g; l, A4 x
  10.   }
    0 h7 B+ A* X- Z' i
  11. })* c5 k5 S! g4 H- B
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">: [- m6 v$ N3 {3 ?' _
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">) y% Q$ M$ e. q, R& d+ Z
  3.   <br><br>- _$ a0 h6 v" N
  4.   <div v-bind:class="{'class1': class1}">2 L: n& V) u) {% j" Q1 g& e
  5.     directiva v-bind:class( u- l' Q7 X4 F0 y
  6.   </div>3 I+ y+ `* N0 ?0 _' q
  7. </div>4 f5 ?5 {( z2 {. Y" _, y6 m
  8.     - s" V2 }' z, v+ [$ V2 x5 v* N6 I
  9. <script>
    & ?- G* c6 {& g9 h) [" i6 a1 b
  10. new Vue({1 f+ s( h& s* X! J
  11.     el: '#app',3 e0 w+ P) q# \5 E) e6 p
  12.   data:{
    / P. ?/ O* @1 r5 ^3 g. t0 d
  13.       class1: false
    - Z& m& j& M& o. I
  14.   }2 X; b" i! g* a4 q" j: Y
  15. });1 e3 R/ G* T4 x6 I
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">7 \( w$ t4 K+ [) J* x0 H0 F6 |6 \" d
  2.     {{5+5}}<br>
    ! ^% S. D% {; y0 {
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    , P9 K0 {1 ^& X, u
  4.     {{ message.split('').reverse().join('') }}
    4 k1 T; O- Y( e! L% n
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    5 Q+ Y% Y: _: j9 I: f. E/ g
  6. </div>
    9 p/ q$ N+ r! M2 t" k) p
  7.    
    + E# O: b; C2 d/ o' y& f, Q
  8. <script>8 N# v& U+ [: L- J$ L5 b, t
  9. new Vue({7 u9 e2 S- ]/ {: z0 B/ H  s
  10.   el: '#app',( o4 P6 b. _/ M$ \' I% N" Y, A9 a3 }# K
  11.   data: {
    5 j- c! v. O, p: M
  12.     ok: true,6 n0 S! }; @, `5 n* W, V3 R% I
  13.     message: 'RUNOOB',
    ; j: r! I) i7 T) v$ s2 F
  14.     id : 12 r9 z( b$ _! R
  15.   }/ z. D1 B& P5 I1 a* H1 w
  16. })
    8 I8 V, ~; H; A) s4 M
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">) X! h5 G& x# f2 o
  2.     <p v-if="seen">现在你看到我了</p>) X5 v1 U5 a0 Y6 H. J
  3. </div>( Z4 _! Q* l' f/ \  I5 j  l; Y
  4.     . C" [7 g6 X5 N: w5 y  V$ y( ]
  5. <script>* ~% m" E5 a: |; `$ d6 A
  6. new Vue({! T$ I1 p8 \$ v! G$ s& L( i
  7.   el: '#app',+ `4 e5 G& {3 e! ], G* Q$ W* ^) M: w
  8.   data: {9 O* d& m& G# A% S
  9.     seen: true; l* O/ N5 D4 \# B3 Q' S& @# |- E
  10.   }0 Q- d  D: z7 ~% o: v
  11. })
      K6 Z: D+ q2 u
  12. </script>
复制代码
* H  f0 C( X- \/ R! H% E8 k; s& g, T
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">( P3 R, ?9 b8 m9 s$ D: `
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>  w! q+ Y6 e9 v# E2 z& D6 B0 f
  3. </div>2 K- A2 o4 Q& W, W! j# U9 u$ w
  4.     $ Y+ [) D5 G+ T/ j* O  ]' N. n5 Z
  5. <script>, C7 }; U! W6 H) m& r6 y
  6. new Vue({) u+ G- }6 a0 \% T
  7.   el: '#app',
    % F7 j% P" t* h  i1 Y  K
  8.   data: {
    7 j- o7 }. u& E. B9 ^
  9.     url: 'http://www.runoob.com'6 N3 g4 p, ^7 C4 m' _/ M
  10.   }+ d* W; k' @' l
  11. })) ~" s0 W! l7 @$ Y) U, f
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
2 @( v& i  U: F
  1. <div id="app">& B5 k  [' M4 f9 \
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    ! ?/ f4 v2 J9 `% p

  3. . W$ Y3 H4 c+ J. B% X$ [! K: Q3 o
  4. </div>
      {( O' M* o, s) u/ ]/ e6 L
  5. ) `) N! {  \  ~  M' x) p
  6. <div id="app2">
    5 _+ a( Y+ N. A3 a9 J- f
  7.    <p v-for="val in arr">
    ! B$ N% b1 S' L7 z$ f; y
  8.     {{val.a}}
    8 @* i; j5 D, R5 l. o( k" R- C& M
  9.    </p>
    1 j. }' N9 ]& N0 V/ }
  10.    <a  v-on:click="tap">点我</a>
    3 `( E+ X4 v# Y, F, y! K0 a
  11. </div>
    ) p2 Q. D' G+ j0 s5 e1 `

  12. 7 r" ]2 @% X" W9 `8 H6 t
  13. * ^3 \& Z2 g' u$ O4 f5 \
  14. <script>
      L7 J# d; G0 y
  15. new Vue({
    : {) b, a+ z3 t1 ]# s8 U4 e1 T5 D: w
  16.   el: '#app',
    . U  Y+ s) O6 u  z
  17.   data: {
    ' o1 \. s$ p9 ?! f) I9 a' F6 H4 K; r( Q
  18.     url: 'http://www.cncml.com'6 K' _( Z  {2 J
  19.   }* C" }: E/ \3 U! r
  20. })
    " Y: q1 @9 V# {
  21. new Vue({! W$ K& M- H" b: }3 x& W) D! b
  22.   el: '#app2',+ F( D" }% N8 j1 N- g
  23.   data: {
    : }2 }. \- m8 U1 v3 e) J7 {4 d( q
  24.     arr:[
      Z( S- c6 H5 t/ \  G: @9 H+ H* a
  25.      {a:'bb'},; R( `8 f$ A1 x: ?  h- y! h
  26.      {a:'cc'}9 I8 M3 ], D& M* l; P! f7 ^
  27.     ]
    ! f" O/ v8 ?& W
  28.   },
    $ U, z& T% N) I
  29.    methods:{5 F' q) f: G# b$ r1 O; X' [# ]" G' k
  30.     tap : function(){* N% {3 \+ s" E) C+ R' U3 C
  31.      this.arr.unshift({a:'new'}). f7 B6 i' k) S3 I2 Q  b- u/ \1 M0 I) i; A
  32.     }% {) `) D7 d2 P0 _
  33.    }' H9 Y! q+ R) E* @7 Q4 d" s$ v
  34. })/ i# t* E- N7 l" Y& a
  35. </script>
复制代码

  Z. r% k) X! ]& @" b4 v
- @9 e) M& j5 k: W, j
在这里参数是监听的事件名。

( i, e0 b8 u  J* s: ?4 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:57 , Processed in 0.066351 second(s), 25 queries .

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