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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10848|回复: 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 J/ j$ u; ?7 `* U; O
  2.   <p>{{ message }}</p>
    % U& P. ~+ s) C" r
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    3 M( _) B1 o. z- Q5 _
  2.     <div v-html="message"></div>
    & A, b2 [0 t2 I
  3. </div>; P' W- M# B! ^8 o, i2 @$ i
  4.     5 J7 @3 R1 G; w$ {
  5. <script>% b6 {. S8 ?7 w  v; |; q
  6. new Vue({: x+ _( f0 U2 j' g( z
  7.   el: '#app',
    9 d: Q6 E2 L2 p* G8 ?6 w5 Z
  8.   data: {
    ! I& A+ t. d( G, Z1 n
  9.     message: '<h1>菜鸟教程</h1>'- h5 f8 D7 Y: P5 O6 U# o
  10.   }
    " \$ P6 `* z( i
  11. })
    # z1 V6 m% N+ p; q( h; @) x+ W
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    6 y4 o2 n5 X8 y
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">  a  A/ T: Q) I" ]0 x* A) b
  3.   <br><br>
      D, g! e! J5 K
  4.   <div v-bind:class="{'class1': class1}">
    . S" f/ V7 H7 |
  5.     directiva v-bind:class7 x4 j, }5 E! W$ M/ o1 ?2 x
  6.   </div>* R6 f9 T( ^1 q9 B' H. v
  7. </div>
    ( C" w3 Q: D! ^  M0 E
  8.     ) ]7 E" z0 g) z  v+ f$ o7 D. H' X0 ?
  9. <script>, c5 B8 w2 S0 r& s6 e
  10. new Vue({
    / g. ]* r% q1 \9 S6 l. _
  11.     el: '#app',( j) n& d) d% o3 h6 N( U. \
  12.   data:{
    % @. |" i7 i& ?- k! j
  13.       class1: false
    * j# D; S' Z$ ]6 L4 u) |1 a4 t
  14.   }3 f: W, Q$ D' d% A
  15. });
    , b, d7 {& X* \5 D9 c* [% C
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    6 D! t4 ?8 }; |. T7 }- p
  2.     {{5+5}}<br>
    9 K, q; e" W0 R& D+ _
  3.     {{ ok ? 'YES' : 'NO' }}<br>% J& b- v+ C1 z
  4.     {{ message.split('').reverse().join('') }}6 I$ h& t" e8 n" c9 {& {; V8 t# ]
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    ; R9 _/ ]6 d5 A( i- b) U
  6. </div>
      K; X$ K9 i! i+ P
  7.    
      i+ D8 @, _& m, V
  8. <script>9 N1 u* c) j* ^3 K
  9. new Vue({
    3 Y" D) }+ l: S
  10.   el: '#app',& P. t# I1 @. G( O, U& ^2 O/ |
  11.   data: {
    " R, f- W5 c' `3 E( T
  12.     ok: true,; t( A$ b7 ?9 {. ]" P
  13.     message: 'RUNOOB',
    # [5 k! Q0 ~) B/ d6 j! K. V
  14.     id : 1; V- m5 o8 x0 m5 U0 h
  15.   }) Z7 u% M$ w; D) {4 z
  16. })
    5 @* d: a  Q0 x8 G9 Z2 a
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    % Y5 Y. w& v" Y- r8 ^/ R. Q
  2.     <p v-if="seen">现在你看到我了</p>
    ' j  Z1 w( u8 b+ t- t, ?. h) s
  3. </div>8 ~) t/ _5 C% R( \! v
  4.     - L: S- K, h4 I
  5. <script>/ `& D* u& D* X% j) q" R/ ]' I
  6. new Vue({
    1 S7 H" w: q# i
  7.   el: '#app',
    * }; O4 E# m' E: F; W8 i" e( k/ `
  8.   data: {
    / P: M6 _; ~: v9 Y7 i
  9.     seen: true
    2 W  J- O' e. ^* I1 T. ~6 ]5 p, O
  10.   }
    9 W7 q: V  `9 P  X- ]
  11. }): I  l3 ]4 g+ U* ^( M& w2 `
  12. </script>
复制代码
* w. s7 V' r$ ^
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">1 Y. L& n; }; `! E$ l7 C' ^' ?  y' e
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>( o: d: C" a* D$ ~- o. k
  3. </div>1 v% |$ s- L( ^
  4.    
    1 h* O. q1 X5 E9 R& D8 o* W
  5. <script>
    & y1 J& _( B: c; H# q% Y
  6. new Vue({8 y4 G' G! K4 ^- t; R' Q$ P
  7.   el: '#app',4 E2 k. g6 p) v5 m* I& Z+ q9 C& p; d
  8.   data: {
    * V8 M9 q; Z3 X$ `  i  }
  9.     url: 'http://www.runoob.com'
    $ `: \$ S9 r. j4 R  u& P
  10.   }
    * U: W5 ^4 C# G  h3 s3 X
  11. })
    % K4 I9 |/ b2 f6 F
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

1 `/ ^0 |7 q& x1 [& u
  1. <div id="app">
    1 U3 ^( n! _8 t" k9 d
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>3 I6 g- Q5 ?- u1 W) k% n
  3. ; b9 L7 X- v0 x  s4 M  [3 J1 p
  4. </div>1 d' n: @$ i' `3 C' a+ A
  5. 1 }( @# O0 R! r3 g/ r( J0 C5 A
  6. <div id="app2">
    6 V4 V; N3 h" q4 @5 c+ v. ?) J
  7.    <p v-for="val in arr">% h; l5 p4 ^8 x* Q' F
  8.     {{val.a}}7 V$ {* n6 p( u* B/ Z
  9.    </p>. a& H# m. [, `. Z5 d
  10.    <a  v-on:click="tap">点我</a>
    % j1 `- \+ @- ?& a/ X) L4 D
  11. </div>' J  R# t  \$ t; O) j8 `6 N
  12. . ~. h# Y( G9 O* g+ z, ^" V( q
  13. . |0 T; z) q! _: R5 R4 H* H- ~
  14. <script>
    ; g5 p# L9 k7 z* t) }; H6 |" z/ f
  15. new Vue({2 C! U% E3 {- j7 d& g1 {  a
  16.   el: '#app',
    - l1 T, e8 m6 g( _2 q0 [
  17.   data: {
    , n) b) Y: m  R. p$ q3 I
  18.     url: 'http://www.cncml.com'  r6 T5 c8 A( M5 L; b+ |
  19.   }
    * }' W( r7 {  |7 N
  20. })9 m, M) g: G, v* f
  21. new Vue({" {4 F0 x) t1 [
  22.   el: '#app2',6 d$ f& E7 H0 [: D
  23.   data: {, H3 \; h( E  I8 C
  24.     arr:[% q( B" [! e: ~* Z# x
  25.      {a:'bb'},* c( ?- y: A# ~, |/ z. y; x; g
  26.      {a:'cc'}  C, _$ v' p- G7 ?. O; J$ S
  27.     ]/ d! v5 |. ?3 w% k
  28.   },9 Z* h. W1 q( u! L! a1 T3 ]
  29.    methods:{
    - c9 o$ N" f) b& m0 n! h
  30.     tap : function(){( D2 l# b' M+ p9 g; [7 W
  31.      this.arr.unshift({a:'new'})
    " d9 N, a9 E# {
  32.     }
    * a# h. L: H% Z- N! B
  33.    }4 \' i5 ?& u) _$ o6 g! ]. V- C
  34. })
    ! N2 x9 V) J1 k' d& t& f( X4 a
  35. </script>
复制代码
& K7 H$ R" O4 r* t( C% q! F9 Y
& S0 Q6 Q: d: g5 j
在这里参数是监听的事件名。
" J6 u  y# J% r5 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 16:23 , Processed in 0.154775 second(s), 23 queries .

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