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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15017|回复: 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">
    , W. O* Y& C8 x# l$ ~/ M: ]
  2.   <p>{{ message }}</p>  G. S+ [5 h' e/ z6 U% y8 c
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">4 e/ ~  x' E2 h1 j1 v8 T& l. Z, W5 S
  2.     <div v-html="message"></div>
    2 E% M7 f/ R' F6 K9 K3 v* t+ ?
  3. </div>4 w4 ^; M: p: n$ j( p0 k2 i
  4.     . D. j9 n6 e4 j' y
  5. <script>0 S/ C4 E1 X5 t* W3 V) F
  6. new Vue({
      X+ V8 I* O4 c' }2 C& G4 J' F
  7.   el: '#app',
    8 {1 ~2 |7 p; J( x7 _- u# C
  8.   data: {) P7 s! _8 T) s
  9.     message: '<h1>菜鸟教程</h1>'
      @6 o* |$ K- m8 A/ i; B/ c5 k
  10.   }; }# N" h; b; p* z1 |/ K: }3 m
  11. })
    6 F0 r' B4 x8 y9 q
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">  G4 E; h3 D& F. X7 p- h8 ?: z
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">7 `& Y) W7 G6 g* d, s
  3.   <br><br>
    9 E3 a8 T% U# A# d
  4.   <div v-bind:class="{'class1': class1}">, p0 r& m8 v3 d0 G
  5.     directiva v-bind:class
    + ?4 x+ Y; I* s+ w' s# x+ d3 O/ w
  6.   </div>4 h* x' L, s  ?6 z; M7 {
  7. </div>
    7 j! u6 p. ]* }. L3 p7 E. K9 l
  8.     $ p  `/ b3 y0 s/ B3 {7 J/ w. _$ c4 t, I
  9. <script>
    $ {. W4 W4 N& y+ E* P: L+ t4 Q
  10. new Vue({3 {1 Y8 u; f; j# r! j; J9 Q
  11.     el: '#app',
    4 Y, b5 l8 g/ B! |7 c: t
  12.   data:{
    . W: ?, }7 ^" [
  13.       class1: false3 H6 K3 z5 [4 B; A/ |, A2 W
  14.   }; G8 u; |! |  f( v% W& C8 z
  15. });
    1 `% ?0 ~7 }# {5 H7 y% V
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    1 F3 `7 d1 e- o5 f& b
  2.     {{5+5}}<br>
    " a  w9 i4 |+ J  t) c- a+ l  e
  3.     {{ ok ? 'YES' : 'NO' }}<br>: z0 R. Q$ {0 x* q- p! u
  4.     {{ message.split('').reverse().join('') }}
    6 j( g1 e3 M# W$ P' X
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    ) F+ G6 B6 V1 {
  6. </div>% z- i: n2 C+ S6 e' G% D( @
  7.     # ?3 a0 o  y( c$ M
  8. <script>, J8 z! w/ |$ ]" p- G6 |% ]
  9. new Vue({
    / H& `* ?/ a& m4 y
  10.   el: '#app',
    + o$ i- x& D2 r" F4 l+ p8 B
  11.   data: {) q1 y  N- Q9 V% \6 h% P- y
  12.     ok: true,' g4 B& N& Z* e
  13.     message: 'RUNOOB',
    $ M- ^. k6 I: L! u+ y5 R/ S% o
  14.     id : 1
    " \5 F/ O; m5 {9 X+ F
  15.   }
    8 t/ b% ?4 j3 e# }& w+ v$ V
  16. })
    ! m! q  O" a; Z2 w* t+ Q3 M, }0 E% A, c
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    + s0 W/ a4 j. I: s) v
  2.     <p v-if="seen">现在你看到我了</p>8 y' O) u! u) `6 E- T  y; v
  3. </div>
    ' m; d, p" g& k7 h  k
  4.    
    3 L$ Q% d' g# ?4 w1 A
  5. <script>
    * m9 U' n( a2 s& o
  6. new Vue({
    # F! r! }0 u+ y0 r# R9 r' f$ a
  7.   el: '#app',
    ) x; S  I2 S. f+ w4 P2 E
  8.   data: {* z) V" W& [  w; O& j4 q$ d1 k1 T4 S0 z
  9.     seen: true2 J5 P  c. U: z: t
  10.   }. G5 U' L) b% x1 f! g+ m
  11. })2 x& K( ~" q% E
  12. </script>
复制代码

" X5 @1 {  N5 L# N! v& I  h( t
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">4 M$ |  \2 ?7 V
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>3 k1 ^3 n' _5 e( y3 h1 V
  3. </div>) \% Q; O1 A+ R+ J
  4.     5 W! ?. d  K% t6 @; f5 L0 E
  5. <script>: p' d) z2 w$ i2 o) h( Z
  6. new Vue({8 B1 y. m5 }( `5 U
  7.   el: '#app',
    3 S* M8 _# i! y$ O6 e5 |
  8.   data: {" ?$ \7 H4 O: }; y
  9.     url: 'http://www.runoob.com'
    * F- a. |  z2 d! \( B9 d# e. L
  10.   }
    3 O" K8 v7 E$ {& b: {  o
  11. }): B3 T$ J* v0 ^, [5 `  t
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
/ G6 y. N$ Y; M5 s, S4 O  [5 y
  1. <div id="app">
    ) S+ l. P1 W9 h9 `' j6 B: @0 [
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>$ E, Z! q5 N% I3 C+ R1 ?! A

  3. 7 T9 c2 I# s6 Y
  4. </div>
    ! H& X5 m/ ]* a8 e* Z
  5. ; m  h1 t; \: x, N6 N9 \1 n1 a1 Z
  6. <div id="app2">9 q2 S; d. M6 C7 h6 a
  7.    <p v-for="val in arr">' x% ~/ l- ^! E+ p3 W0 P
  8.     {{val.a}}3 K& Z) K( Q1 U7 U
  9.    </p>2 H: |3 w: z0 _8 V+ X
  10.    <a  v-on:click="tap">点我</a>
    , s4 T4 G6 A/ n9 U/ d" J
  11. </div>
    ' Z2 H. |0 T, P/ ^2 s4 y8 d) L
  12. & O' x$ k0 Z' a0 T  i8 L! D& V
  13. 9 c0 V" l9 A" L2 d2 G5 J
  14. <script>, ~' v: ?7 H& I" u$ F/ x" F
  15. new Vue({
    + g; N( ]% g2 k5 C
  16.   el: '#app',: ^) {+ I, C/ p, r+ J$ ?; S2 M
  17.   data: {
    1 i3 I8 |4 `! A4 n
  18.     url: 'http://www.cncml.com'  q4 f$ a8 R: F8 E
  19.   }
    " A  f% L, S- v0 i  s" n
  20. })
      W6 m/ B! E. L0 l" {+ V
  21. new Vue({
    5 X/ w0 R  b+ C! q7 {8 h  R0 P. r
  22.   el: '#app2',
    9 m& \; |$ K. c: K! h" A8 q! v
  23.   data: {
    3 r$ J+ W& v. ~5 X% |9 M
  24.     arr:[% g3 A7 Y9 T* ?- j
  25.      {a:'bb'},
    ' @/ Q" _7 P4 z3 }7 j+ h! ~
  26.      {a:'cc'}  u3 P! D* `5 w3 \8 M: n
  27.     ]  U& i. d8 t6 I
  28.   },
    1 [8 i  _1 z8 Y$ b% J
  29.    methods:{
    # `9 h5 t' w. l& @& A% G
  30.     tap : function(){
    8 |! b0 v0 Q: \2 B# |
  31.      this.arr.unshift({a:'new'})
    : d8 ]# b0 v7 b, ?4 T, z6 k
  32.     }- w) d% z7 G7 z
  33.    }! Z# U  M# U" ?( R3 `  V
  34. })
    - W8 W- J! `# J( s6 o
  35. </script>
复制代码

) d: i8 h/ `8 G" D* }6 @

+ c* W! y% @& |
在这里参数是监听的事件名。

0 x6 w% _: z* r+ b) E9 P" I6 T0 N) O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 20:19 , Processed in 0.062680 second(s), 22 queries .

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