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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14880|回复: 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">7 R# {! c: }* i8 }" J) d- d  \# P; v
  2.   <p>{{ message }}</p>4 u1 M. p5 U- }, i( u
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    ; f6 i* ^# V9 C; ?1 H# X! B
  2.     <div v-html="message"></div>
    # l; ?2 o' t3 v8 ]9 V5 ?
  3. </div>- Q- ]$ T0 c$ q% m5 B
  4.     * t! P" c- i$ _& |3 C0 k
  5. <script>
    8 M( \" u$ [& Q: A! b* }$ N1 b
  6. new Vue({2 v! x9 x# U$ b: u6 Y& n+ E
  7.   el: '#app',6 ^; C8 N7 \$ F. s! G
  8.   data: {
    % z5 a0 G4 I) y
  9.     message: '<h1>菜鸟教程</h1>'2 S% ?7 r! |6 k9 x. ~$ f  M
  10.   }  T' m0 \) H3 {# o8 _
  11. })
    2 x% u5 o* z! u/ Y
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    3 d1 h1 S- l1 n" C
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">3 m; n( }( c: r/ |
  3.   <br><br>3 m) r& A& Y1 Y5 s# O2 \
  4.   <div v-bind:class="{'class1': class1}">7 ^$ C# }+ s3 m
  5.     directiva v-bind:class
    / ~# h5 m+ w3 z! j+ u
  6.   </div>7 V  d! M) i& F, D; H9 J
  7. </div>
      `0 F, }9 n; r0 E7 \
  8.     & H. t$ w% [+ m' T, ?- R
  9. <script>
    / B# B0 E1 x' ]
  10. new Vue({/ o$ s/ C  `* i6 }
  11.     el: '#app',
    : V8 Q8 e' V0 _2 R
  12.   data:{
    ( H& p3 {" i) B; ^0 X5 w
  13.       class1: false
    & N; e' e& n5 A. |+ r
  14.   }& m8 F/ i- [2 k* n
  15. });+ R9 L9 Y3 p2 x0 [
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    $ D' X4 y: O. F) u6 c, L5 p
  2.     {{5+5}}<br>
    3 B8 e& y, `; o3 f
  3.     {{ ok ? 'YES' : 'NO' }}<br>2 [& I/ P, x% l- B/ [
  4.     {{ message.split('').reverse().join('') }}
    0 p7 _" Q4 g! s5 a
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    0 U0 N" Q! \+ \$ E/ t
  6. </div>% P! q" w' e) U% ^/ I+ ^/ o+ v% }
  7.    
    8 {' b& n# j( i0 v9 l/ `
  8. <script>% I0 g2 Q" A0 `" D% E& Q
  9. new Vue({8 f& p3 {0 z% N
  10.   el: '#app',) y0 p/ T: ]' o# B
  11.   data: {
    5 U4 b+ S: s8 G4 y! s. _! [
  12.     ok: true,4 _9 t3 M6 E, }- [! L7 Y
  13.     message: 'RUNOOB',
    ' o$ r/ _" j! e- `
  14.     id : 10 N5 n2 w7 c& @+ G$ S4 d: _/ [  U7 f# h
  15.   }% m+ r5 |1 o, z4 ]( e
  16. })
    . ~+ l% Y5 E) ~0 ]1 B: x
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">) F3 ~8 Y0 A5 i( g
  2.     <p v-if="seen">现在你看到我了</p>
    * G3 D: e' z5 j  J# q" g( Z
  3. </div>
      @$ D! V/ G2 F/ ~, {+ S* x3 _
  4.    
    3 ]) Q9 c6 b. A& e& E" P7 X' s3 ?& C
  5. <script>
    ' `& v3 s  `! H1 ~
  6. new Vue({( S+ I- T% T! @6 M4 l: K
  7.   el: '#app',
      Q3 r8 `* }9 I) U
  8.   data: {
    7 l7 J. M; w! h& X' x4 r
  9.     seen: true3 ^: Z/ p5 ^% x- `7 X/ q6 n3 t
  10.   }
    3 g( }5 ^8 V0 j, e
  11. }). L9 l3 v6 F% ]1 u) y1 {( x
  12. </script>
复制代码

2 E! i1 M( t' W0 m: B4 n
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    1 m8 u+ v3 D4 f( c, ?
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>9 b- s# u$ R, W9 W9 V" u
  3. </div>
    9 E$ D0 _. T' X% o3 U: B# L
  4.    
    : l, F  J# S4 @6 ~1 }) m" \. @+ r
  5. <script>
      A: g8 H. Z* d. Z/ G2 |
  6. new Vue({
    ( |9 @7 l) f: m" S6 ^' ?8 L. z
  7.   el: '#app',0 O" d4 E, N! Y% V% ?( @
  8.   data: {, l/ b* P- L9 I# ~' ~* Y
  9.     url: 'http://www.runoob.com'
    . a: Q) S% N, \" \
  10.   }) [- B* t0 \& |' p# l& v4 X
  11. })
    / O7 D- Z7 M8 a& l! [8 e
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
+ a0 M+ H% f- S7 Y
  1. <div id="app">
    3 _7 ?9 X6 n9 l3 J7 z6 U7 A* Q
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>$ q  s* P! i; w3 o& V) ~  ~

  3. 2 N' P2 P+ e2 a, D& h- C1 z+ z. h4 z
  4. </div>
    5 X* O, J/ [  Y" T0 ^2 M" r6 U9 L

  5. ' k5 z% {6 j% y; {+ i5 H. J
  6. <div id="app2">, b9 R. v$ j( X: P" G
  7.    <p v-for="val in arr">: ^6 A; z1 |8 i9 |; j# ^
  8.     {{val.a}}
    ( Q' Y* ?9 G; s" m+ x
  9.    </p>5 g8 w' e* m8 }( e
  10.    <a  v-on:click="tap">点我</a>
    ! k7 G% `7 R" R0 M
  11. </div># Y# D# A) M4 t# d- X+ R8 h& [
  12. % ^$ T3 d1 ^3 j2 g4 G
  13. 1 B3 A1 w5 R4 R
  14. <script>
    2 y. D  @0 i" s! o. Z7 E
  15. new Vue({
    0 h0 _) z3 ^1 Y
  16.   el: '#app',
    / E+ p, d# n, D5 a# h, J
  17.   data: {
    ) T( w* H  }% O6 ^7 E! i' @% d
  18.     url: 'http://www.cncml.com'- s3 S( g; k; x1 N1 R
  19.   }+ }" \) B1 H# h% f0 w3 P7 Z" C, @; M7 {
  20. }): k; U5 m6 Z# K
  21. new Vue({
    & V. P3 Q- ~+ ~( i: F8 G) ~
  22.   el: '#app2',
    . \/ V  F* O% s" _/ c& a3 v
  23.   data: {
    / v! A% R' ?$ E! t2 g
  24.     arr:[
      t1 Q- ^5 E- {# c3 E# |
  25.      {a:'bb'},
    . M& k9 e5 t1 ^5 \  Q  T* T
  26.      {a:'cc'}
    * p5 z- `$ b' g/ Y# f
  27.     ]
    % t3 s4 R6 P0 b/ v. j
  28.   }," g  T0 o) D# q. S$ c2 O* k0 v
  29.    methods:{/ \/ d" G# z- d( ~" _- q0 O* b
  30.     tap : function(){" H. @/ d2 t; S+ m/ a7 L; w1 r
  31.      this.arr.unshift({a:'new'})
    ' X" o8 p' u8 ?! p$ R* j& m3 q
  32.     }/ a! u) G1 B( c8 W3 s0 @
  33.    }$ B! U: S% ?# Z6 H8 @, e9 I' @
  34. })
    ; _+ g! X6 O# \5 A
  35. </script>
复制代码
) `9 J% o5 b4 v, H& Q' v
0 u$ S/ M2 z' B! x; E+ n
在这里参数是监听的事件名。

" {4 p- `$ _; C; @; n: Q8 Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:55 , Processed in 0.062294 second(s), 23 queries .

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