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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15305|回复: 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">
    " n- N% W  {& J, E
  2.   <p>{{ message }}</p>
    . \  T- I) t" K( v0 T0 t
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">! M- q! l' M' v9 X
  2.     <div v-html="message"></div>0 B9 n- |+ _7 q  n) l9 v4 ~
  3. </div>
    3 F2 d; e& |3 }5 Z# x
  4.     * D  A* _4 N, }
  5. <script>  z( V+ k# F0 s: E$ o( v% }3 e* O
  6. new Vue({; f( Z9 L  M0 b, X1 e" w
  7.   el: '#app',+ L2 Q  n. _: [: p3 e# c
  8.   data: {
    - c$ a& B& R" ?
  9.     message: '<h1>菜鸟教程</h1>'5 d4 P" ]% m! n/ Q- p0 M
  10.   }
      Q, N- H; w- Q" `+ y* Q
  11. }): P# }  t8 e; e6 X! }
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">8 b3 w! X# P/ s# C: L( P6 m
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">/ z  X% {! M5 d! `+ ^
  3.   <br><br>$ M, `1 g7 t- D) b- M; U
  4.   <div v-bind:class="{'class1': class1}">/ d6 T+ L& K: w4 p7 N: i; O1 [9 R, X
  5.     directiva v-bind:class5 n# G7 x" j" u& k& d4 S$ v
  6.   </div>
    4 y: a' t% O5 n2 W% X
  7. </div>
    & W7 n9 u% D) p1 w
  8.       G, W  V+ ?" r* t
  9. <script># z- ], J8 r! Z% Y; ?1 T6 w
  10. new Vue({+ e6 R2 ]5 N/ ^' _2 T
  11.     el: '#app',
    / i3 F+ K. k* e. f6 F
  12.   data:{3 L1 W4 w& m* Y. c9 A, c! G+ t; a& S
  13.       class1: false% u/ k' B# Z# w
  14.   }
    ; B8 p' ?! V: i1 }! ?
  15. });
    7 |' f6 S# N; k. u/ t% ], B  t! g
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    - P/ I" G7 B- p, t) _
  2.     {{5+5}}<br>( e7 A( b% O. H" W# m: F
  3.     {{ ok ? 'YES' : 'NO' }}<br>% D$ R4 }7 p$ X
  4.     {{ message.split('').reverse().join('') }}( X% H8 z; `$ F7 Q
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>  p5 y  t& q( |' x. r( H
  6. </div>
    : Z0 j6 A4 l* R: `  T
  7.    
    3 f; O9 I) B; V: w# P3 O1 B, }3 f
  8. <script>
    6 O0 w6 v1 B) |  R2 I( s
  9. new Vue({
    ) A) t. C8 ~& Y
  10.   el: '#app',
    2 @& u6 p# Y- s' U, w# Q
  11.   data: {
    0 p' t7 C5 X, q4 [8 D! F
  12.     ok: true,
    . c. `0 t! j2 r' w& T
  13.     message: 'RUNOOB',$ h( m* f* d1 q5 Z5 d
  14.     id : 19 Y  H2 O& i# f9 U
  15.   }: v# l( ^8 I4 M2 ~
  16. })4 `9 s6 e' |# E8 Y: K! R( u
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">2 r( o. n' F- o$ |: K) R! P/ I
  2.     <p v-if="seen">现在你看到我了</p>$ Y% I9 N) H8 c9 ]
  3. </div># C$ }2 O$ c. w! P- B
  4.    
    * _6 U8 v1 b( X5 Y' \5 y
  5. <script>7 _2 y0 m9 X* @+ Q1 P& I; `' H
  6. new Vue({; k, n- F1 U+ w. R# @
  7.   el: '#app',
    8 O: l- h: f+ r+ `# P* \
  8.   data: {% Q: W6 H+ r! }8 ~8 L. z& ~' k7 P
  9.     seen: true7 F7 n1 Y  a0 R3 U; |, M7 ^' c
  10.   }
    3 L7 Y8 ]1 q& k0 u+ z2 J' F& `, l
  11. })
    3 ^1 \) g4 t3 U) U9 P
  12. </script>
复制代码
; e  i2 q/ y& j, z0 f& X5 b
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    : H5 X& Q% j& f3 s
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre># W! c0 |  R# r
  3. </div>- e8 W, v; i- K. a! o4 Q1 g* `
  4.     5 H2 f7 D+ S9 R% |+ m9 R6 g
  5. <script>
    0 |) }3 L) F4 F5 p! `
  6. new Vue({
    ' x2 k  q" C# q  \; ~# {  i
  7.   el: '#app',- H+ v# B# _7 u4 g$ }- k- P
  8.   data: {* a" p8 C/ G0 |% o" U6 i6 ^; p
  9.     url: 'http://www.runoob.com'
    9 |- Z/ G$ U* J4 w8 Y% Z! S
  10.   }' I4 e+ M/ t" E  `8 f+ e
  11. })
    5 Q+ C7 v# Y9 G
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

6 D. E4 H9 d# [. M5 a, _. e
  1. <div id="app"># \5 a' \( ]- o) X# }
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    6 h! b& Z9 N& J- T$ m1 J
  3. ! l- v7 a  r+ a9 ?( n% n( `
  4. </div>
    , j- |3 C4 [& Y0 b
  5. 9 P; S; M1 k; e* g
  6. <div id="app2">
    2 \5 }  F/ y- M
  7.    <p v-for="val in arr">
    6 K( Q; k9 A3 `0 k" D# k+ ]* C
  8.     {{val.a}}3 z/ Z/ \$ b& _7 H2 o: A5 T* x+ @
  9.    </p>
    + l6 F( S1 w- X2 T# C5 Z
  10.    <a  v-on:click="tap">点我</a>
    9 v* j: _! x, r8 t3 l& a% Q
  11. </div>: Z, w6 W' O0 Q% k+ i- j+ m
  12. : c7 Y" n& c2 Q( [
  13. 3 @0 L* F6 L: i+ M
  14. <script>+ B2 q% j: f! B; s3 S; ~
  15. new Vue({2 t6 f; O' D9 W" Y: S
  16.   el: '#app',
    " N7 ^  N( B7 W( V0 |; U" |+ o
  17.   data: {
    - W2 i$ A6 n1 p0 E1 S( Y) `
  18.     url: 'http://www.cncml.com'( b" |; c. [/ U' |- v3 E
  19.   }
    3 n$ y! J% ]# k" p9 U# P
  20. })
    6 u3 _1 M+ i( ~: `3 [
  21. new Vue({
    7 O! C$ j! x8 c# @: K% w
  22.   el: '#app2',7 c& s& I( w8 q/ ?' Q* c8 P
  23.   data: {4 ^0 K, W3 T2 [+ P
  24.     arr:[5 {/ g. K% L! V5 g3 {* b
  25.      {a:'bb'},
    + Q/ ~! F' @& G5 S. b
  26.      {a:'cc'}: Z3 E2 ?) V8 u3 [7 u! W# p# I2 L
  27.     ]! m5 q4 E- E# v$ S
  28.   },, S1 M" m  H8 d+ {
  29.    methods:{( j( f2 V+ Q" t; ~& O* s
  30.     tap : function(){% s7 O$ p  \3 G7 {0 t: Z. i
  31.      this.arr.unshift({a:'new'})
    ( a( \# y# z2 Y9 y. Y
  32.     }
    - |$ n7 e: e5 u
  33.    }
      K/ v- ~* c3 Q9 m9 ?* a
  34. })  `" i6 d0 X& k2 o, ?
  35. </script>
复制代码

1 G7 r. Z8 \: i. y5 A
& E: J& _# }7 }! b1 ~# H6 K
在这里参数是监听的事件名。

; l' r3 a; `. O. y7 @1 B* T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:02 , Processed in 0.062372 second(s), 24 queries .

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