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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15031|回复: 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">$ T2 ~2 Y4 p) y& M; r
  2.   <p>{{ message }}</p>
    : y7 Y+ }, s; H9 w0 |  U3 k! Z! {
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">0 X& ?% \/ c6 R/ \/ n8 n* R
  2.     <div v-html="message"></div>4 O7 {2 \( L" ~& q$ ~: e! |, J' d0 Y
  3. </div>( b2 j1 U. q( J8 Y: Q) h+ d& Y
  4.       I; A8 z; u4 Y, N
  5. <script>, i9 ?, t, d9 j) ]1 P( l- Z% O' Z0 M
  6. new Vue({
    & a# x- @0 s6 Y- x& @4 x6 |
  7.   el: '#app',; Z- h0 X  O0 o, Z+ o8 o# K
  8.   data: {
    - U. j+ `5 v* |* y
  9.     message: '<h1>菜鸟教程</h1>'
    - m0 h7 m3 j# D- Y+ a- ^& n2 s% u
  10.   }# l+ e. p; p$ e! {( Z& Q
  11. })0 R8 m; c( {- A( t- H
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">' k4 R) Q6 l7 T7 C" {! `& Q
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    $ E' `- z0 \0 j! m/ [
  3.   <br><br>
    * ]: x: K! O3 a2 f4 t% F9 y
  4.   <div v-bind:class="{'class1': class1}">( Z/ s( F' `  N& c! t* j0 N
  5.     directiva v-bind:class
    * t) \7 ?2 u5 A" V( U& f+ z
  6.   </div>
    , {  Y; |' W2 t% p
  7. </div>
    / v/ l. l5 ]: b# P& c4 `) k
  8.     5 |" h0 u# W  V( R! ~
  9. <script>
    + o# @1 [* u' S8 R+ Q, h, I
  10. new Vue({
    / N: @* f9 L7 w8 O. n$ Y/ V% G
  11.     el: '#app',
    ' h7 @* O1 F4 {, d3 p. G6 K
  12.   data:{5 l( ~, a3 t, k( W0 F
  13.       class1: false
    7 `% `7 C; J; O* K& A8 L$ p' U
  14.   }' m$ |3 Y9 T0 o; {! c
  15. });
    " V4 D3 @# s* g) R
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">% E7 B; O6 a& @; A1 s8 ^
  2.     {{5+5}}<br>( {3 P# Q! V2 r4 u! D
  3.     {{ ok ? 'YES' : 'NO' }}<br>1 _; Q8 O0 @5 I7 w
  4.     {{ message.split('').reverse().join('') }}
    , k% C3 U: M! x$ I- l
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    4 J; O" p3 B$ L+ i" v' }* C
  6. </div>
    6 t3 D( `  ~0 b3 {1 ~
  7.    
    ! Q9 T4 g9 E2 Z+ A8 J
  8. <script>
    # t9 D( g: p8 B! j" d9 n  ]
  9. new Vue({
    8 J! H5 E; ]; g! e% [; M* k, `) R
  10.   el: '#app',
    & ^- z; e8 t4 Y" k7 e0 T, v
  11.   data: {
    , Y% Q. Q' L, L/ Q
  12.     ok: true,
    % U3 O, R+ a+ ^3 m3 |2 Y
  13.     message: 'RUNOOB',
    - i) }' u! V$ @6 F/ ^  u
  14.     id : 1
    & p% W) }/ ?/ r. \
  15.   }, |. S' X% o0 b# q+ k6 F
  16. })* {% K! i' ]' F+ D/ @9 B
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    5 e. E3 @# X1 @& y
  2.     <p v-if="seen">现在你看到我了</p>8 d) s  l$ v2 l# P4 s8 w
  3. </div>, b8 K$ r8 |6 a3 u) Y
  4.    
    8 b: U2 m) v! P$ }$ Z" \% }
  5. <script>; L. i5 T- d9 j
  6. new Vue({+ u( h1 K; l* \& ?6 _( P
  7.   el: '#app',' C1 {/ W; R, c, a2 U
  8.   data: {# v. G6 D3 P  l8 Q' R' v
  9.     seen: true
    , h0 i! O/ i- C+ P
  10.   }
      ]* `& w3 q1 [( ?2 L" w
  11. })$ _: u, t4 L2 {. w% s  ^' P! R1 W; Z
  12. </script>
复制代码

, z4 O1 v# J4 X
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    : R" d7 ]9 e! H
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>4 S$ n" q* D% f, _# J  ]
  3. </div>
    ( r7 Z) f! J7 \% L; r0 ?$ A  G
  4.     . s4 U/ F! V# B: l  y% a
  5. <script>7 ?+ q  Z% Y6 ]. ?8 ]
  6. new Vue({* ?, p& L8 R. a  k' O8 I! J
  7.   el: '#app',
    ( a7 e1 l9 `- ]( ]) K
  8.   data: {
    ; j8 R+ d4 W: g! T8 q
  9.     url: 'http://www.runoob.com'
    5 S6 W7 a: t3 u+ p9 f8 r
  10.   }
    - g# Z3 O  W- @* s
  11. })) R% j, o) V, K( ^
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

8 h" l7 P& ~1 o+ G- U+ }1 q# w
  1. <div id="app">5 W5 i+ Z% b, J
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>* ?2 i* W% g; {, V5 T9 E

  3. 4 d: K* w8 J1 c- P8 F4 ?4 V( P
  4. </div>
    6 X, o! t# ?( X5 I4 W
  5. " C; d1 U1 Q, ]5 W
  6. <div id="app2">8 h; L2 L% N4 d+ Z9 a! c1 w! \' ~
  7.    <p v-for="val in arr">0 R( n: l% h- i
  8.     {{val.a}}
    : G( G4 `6 w2 [# m" s# k( K# }7 Q
  9.    </p>$ P- |) _5 x, I/ G- I0 M  K
  10.    <a  v-on:click="tap">点我</a>3 ~3 E) v8 g9 R1 ~5 f( m# P. X: a
  11. </div>
    % g+ X0 Z* X; E# Z0 o$ u' C

  12. * c! T. h4 y3 D
  13. ) [/ T+ Y! ]' k4 q
  14. <script>5 T5 a; f* u- b5 d, v" \
  15. new Vue({
    . P7 I" g# W- Q' @) W! O/ x
  16.   el: '#app',
    * G; R& C4 F+ e; D) I  e
  17.   data: {
    0 O, f6 D% g4 ^; t+ K  m
  18.     url: 'http://www.cncml.com'
    + s" v: ?+ h9 T0 `
  19.   }
    0 L4 J' M0 ^" O1 Z
  20. })& e6 }( ]3 h9 n1 J
  21. new Vue({' G6 ?+ B; Y1 k" m  g' \  B2 K
  22.   el: '#app2',
    * i" y: h& }  }) \5 V  z: Q: W
  23.   data: {
    $ g. @# h8 z  u6 \/ M
  24.     arr:[
    + Q0 K6 m9 @: W! d/ p
  25.      {a:'bb'},+ k- j' f" o6 S* N* N3 B# U6 j
  26.      {a:'cc'}2 V. V7 B# V+ Q& w9 |  Z, b
  27.     ]
    & c; P1 I( k8 s
  28.   },- F5 Q6 `; B, B5 H3 W+ a; [8 X' P. f0 t
  29.    methods:{& P* K9 f; C, h" Y4 b8 g5 L2 C
  30.     tap : function(){! F4 [6 T9 t0 l7 `: A$ n" }
  31.      this.arr.unshift({a:'new'})
    3 c" a" \, |  D9 P: [/ L2 o
  32.     }
    5 @7 x  C  W5 `% Y# r& @! g
  33.    }
    + |1 p7 e1 t: |/ k  L
  34. })
    ) |0 L: T# O! A" ^& i
  35. </script>
复制代码

, I1 u7 s' V# A

5 B2 f8 a+ [- q, R
在这里参数是监听的事件名。
. L+ _% t+ W% e) L- {3 F0 Y9 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 23:15 , Processed in 0.058380 second(s), 22 queries .

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