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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15014|回复: 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">
    1 Z" s# ]. Y/ W8 X3 D6 u* i
  2.   <p>{{ message }}</p>$ Z# q" U$ G% _) q- y
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    # A4 U5 a  i7 S1 i1 l! O3 Y* Q; C
  2.     <div v-html="message"></div>, e) l5 _. ~* i( l
  3. </div>+ l7 y+ j2 d# T6 @9 f. ]- s' y
  4.     . P; F* n/ u$ C' r3 ]& @" ^
  5. <script>% s/ i& X5 `/ l3 R% o
  6. new Vue({: ]  w+ N) W9 t$ t/ w
  7.   el: '#app',& _5 I, S3 |7 A% m2 O+ U
  8.   data: {
    - V& ]( S4 z# e4 P. n2 S" f' X
  9.     message: '<h1>菜鸟教程</h1>'# e+ Q/ O* X/ ~# c6 Z
  10.   }
    % b: G: p: l1 a! n0 i
  11. })& {, s' g2 \2 d/ x# c
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    ( T% m! f, ?' L) _0 q7 |+ s5 i) J
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    , |1 s( L  P: C1 {) }6 k$ m
  3.   <br><br>
    4 b2 O# f4 Z* M
  4.   <div v-bind:class="{'class1': class1}">( i3 L, a* D0 t& |% m6 V4 Y
  5.     directiva v-bind:class/ o; J0 L- S2 a
  6.   </div>
    4 U4 {- j" T9 M! k( n% @
  7. </div>
    / O- h" B; X9 ?- a2 y
  8.    
    2 m. [5 D  T3 r
  9. <script>  u  }& B1 w& l5 P3 Y
  10. new Vue({
    0 |) @* S. _1 a/ d5 \; h; M
  11.     el: '#app',
    % B+ m3 S! s- i$ g( |: G$ O
  12.   data:{" G! A5 T0 t, \' [5 t
  13.       class1: false, o: d" L0 n0 k% s3 j7 H& O. C6 E# O' R
  14.   }
      x, M1 t! O4 K+ X1 j- p7 q3 Y* E4 B3 A
  15. });+ z0 o  _  d. |' G& G
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">7 Y4 h8 f( U7 u3 K+ L" j
  2.     {{5+5}}<br>
    2 f3 k; n* Z- Y" ^+ I) p1 G7 G
  3.     {{ ok ? 'YES' : 'NO' }}<br>4 a0 l, Y& T0 B/ Z' P& ^
  4.     {{ message.split('').reverse().join('') }}
    & Y5 e# i, n( c7 k# x- {
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>8 L9 l% y% F2 a" l% G+ ^0 H
  6. </div>
    7 _5 p, w4 J: h8 m- ?3 P8 Q
  7.     ( M4 o' \, R' x
  8. <script>( g! g' ~, y  D/ {
  9. new Vue({
    5 {8 y  u5 w; b7 c0 h
  10.   el: '#app',
    3 p' d- v# G( R( l+ `
  11.   data: {' [& W9 x. H2 {& J$ _  s+ `
  12.     ok: true,
    , e7 E) ?# z0 E. A! Q% v
  13.     message: 'RUNOOB',0 a5 t0 ]" f* p8 r4 m
  14.     id : 1: j- Z- L( s0 v. R7 w) ?/ j6 f
  15.   }! [9 K; d! |6 y9 p& i, N1 Y( N* ?( E
  16. })
    7 S4 F* `/ ^0 q# }
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">0 m# R/ \% H  v6 y( C) ]  O
  2.     <p v-if="seen">现在你看到我了</p>" L4 `" x: o6 M8 j+ ^. \' @
  3. </div>
    * H) B7 \  ]( _  J7 T3 g5 z; X" H
  4.     . I$ l4 \5 h0 w
  5. <script>, U! \  a* Y# H: y9 S6 y
  6. new Vue({% Z9 ^) ~$ R0 T+ k" Z
  7.   el: '#app',6 p0 d& p5 d: M' y
  8.   data: {
    5 }. g/ I% Z0 V: t( |, D3 e0 F
  9.     seen: true- ~6 Z0 ^3 k/ G5 Y  y" [/ Y
  10.   }: x* R# L/ C6 h7 n9 O+ @
  11. })
    2 b" t7 q0 |# y8 @! }$ l: p& b6 P
  12. </script>
复制代码
) E! S7 ~; @' r- c: {+ j+ r
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">- F; Q/ L" b' Z# z
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    * F$ z6 o! F3 M( k3 R% \
  3. </div>5 T0 {# _7 z* E! E  u$ R
  4.     3 m5 B" [, b, @" u
  5. <script>
      d* N. Q  {% l1 F) f2 }  g5 F
  6. new Vue({
    8 R. O* g' Y1 r5 G/ y
  7.   el: '#app',4 D! D; f9 Y+ F6 \/ n/ u- t" a  s; w" A
  8.   data: {$ Q. X0 U# p7 d8 [% s! z
  9.     url: 'http://www.runoob.com'6 _; X4 E! X  g/ s  P7 P
  10.   }
    & R! _$ N& }+ }
  11. }). D" s% |# X: {- _! T; \1 e
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

: e( L6 u; t5 S3 r! L3 v( O( N
  1. <div id="app">* q2 @+ O) o( A: R' d4 }2 Q
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>5 j6 n$ U+ k! b# D
  3. 7 m; e( e' o7 P: Y: A- Z% z
  4. </div>
    2 T5 O( K, E8 A' |0 d( f1 v
  5. 0 h) u9 O4 c' ^$ f
  6. <div id="app2">* I& I/ f6 a8 P$ V: x5 r
  7.    <p v-for="val in arr">5 ]2 Q7 K; x& j' k6 O  N) q; j6 Y
  8.     {{val.a}}; X) S  ^6 {6 z+ {5 T; U
  9.    </p>
    9 z7 Y, P- N7 \3 ^' C
  10.    <a  v-on:click="tap">点我</a>
    - b' j) d% T( ?2 j
  11. </div>9 c# W) n6 s* O7 P

  12. 7 \5 \5 S) n' N$ R9 q
  13. * u  D, i% B; t( r4 @8 x# E6 P
  14. <script>( t& I, Z9 v- h# S' l9 Q- ?: s
  15. new Vue({8 }5 g- ~: O; e& r+ }7 _- [* ^% t
  16.   el: '#app',
    & ?1 z' ]) C# u7 L
  17.   data: {
    8 n6 Q* e8 k# C/ j
  18.     url: 'http://www.cncml.com'
    9 J# C6 p/ S; {9 t5 W
  19.   }
    3 l8 ~1 f% ?8 j0 R$ z& I
  20. })" X/ R- N! y: [# T' `* w
  21. new Vue({
    . @/ m- s  a- S) S3 c% J
  22.   el: '#app2',
    ' K- i3 p/ `: J+ {  Q
  23.   data: {6 K9 U1 w$ s) T
  24.     arr:[
    2 M$ }+ N( S) ^$ e+ w
  25.      {a:'bb'},
    , |" E% O. Y+ b$ z5 m
  26.      {a:'cc'}
    8 F" o" W1 V; ^; A  N% ^: j0 Y- y
  27.     ]! m  M# d/ ?3 O* V3 j3 s
  28.   },* m  \) ~* L+ M9 v, l- v/ T- ^5 B: _
  29.    methods:{9 V/ `- {3 _' x
  30.     tap : function(){
    " t. i' r0 l. t; ?+ L
  31.      this.arr.unshift({a:'new'})% \4 H. J* Z7 D/ t8 I/ X
  32.     }
    ' J. C  I  S0 f3 ^, T6 m$ _
  33.    }
    . h5 m+ A3 e' _9 Z
  34. })
    : l9 j) C, M. l8 g
  35. </script>
复制代码
' g4 |- l0 N: C4 ~' A3 \' W: }

4 W, r+ [- H" j% w
在这里参数是监听的事件名。

6 [# e' ]1 {: [# N( }( }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:51 , Processed in 0.083860 second(s), 23 queries .

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