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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15308|回复: 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">
    ! d! F- Q2 Z/ Z. f
  2.   <p>{{ message }}</p>) q. z% E. P2 @' |" N
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    ) {  g8 R  j, m6 T/ ?
  2.     <div v-html="message"></div>
    " C+ t. j5 Y% V5 q
  3. </div>
    9 m0 L( `( |7 K* E
  4.     - D. t$ m2 v* s& n$ T
  5. <script>
      }5 v( ^  p" {( F) D& A( j/ T+ F
  6. new Vue({% ~2 y" d8 J( j: ^7 y: c+ U
  7.   el: '#app',
    " J0 s8 j! ]+ j
  8.   data: {
    0 M& }: k* M4 A0 _2 N2 X
  9.     message: '<h1>菜鸟教程</h1>'; m/ O- k. ?# _
  10.   }: \, N- H# ^# D5 l
  11. })& l% ?+ R1 D, d/ g5 `
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">, z# w7 N" u% e1 I
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    : a; r, ^0 b2 T% o  W, K0 w
  3.   <br><br>
    $ O0 U  c* h% k& Z$ {  m5 F
  4.   <div v-bind:class="{'class1': class1}">' N! {6 g% u8 M, C5 @
  5.     directiva v-bind:class$ f  I/ ]+ m) b0 n) ~& u
  6.   </div># d$ N/ m4 o# T9 Y4 l1 C- i
  7. </div>
    . H' b/ [1 j1 C, C0 Q. P
  8.    
    ; T& \1 q+ s8 c4 j  K
  9. <script>( G1 k9 X) Q" `3 z0 Z
  10. new Vue({  |# c7 e: v, k7 O0 w9 V
  11.     el: '#app',1 j, m- z/ a* u. |& z
  12.   data:{
    , d8 z% C6 V, ?  q
  13.       class1: false
    . @( \# }4 G3 P. K& J
  14.   }+ l+ Y; h/ j% j- j6 |  M8 l
  15. });: D9 O8 V; N6 r
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    ' p! ]- a- Y: l# m( M& M  t# b. D
  2.     {{5+5}}<br>* O( C/ H5 @3 J+ j
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    6 q% d  p* K6 D2 n# ]
  4.     {{ message.split('').reverse().join('') }}
    6 m4 @, m6 i" \$ ^
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    - B: w4 l8 Y% v
  6. </div>
    7 ]$ Z4 a3 O- B; U
  7.     " E2 ~& O& D, E, X
  8. <script>0 u+ N( l, b* F+ J: w
  9. new Vue({. E/ r7 y& ]9 {2 J" X6 D- B$ X
  10.   el: '#app',6 y1 v' p8 h0 p% ]0 Q8 M/ A' j8 M" O
  11.   data: {
    ; A: J7 b6 S1 s# S- |6 O7 c8 _
  12.     ok: true,
      _; F9 g% e; P0 x. f* x6 _
  13.     message: 'RUNOOB',/ |/ m4 G3 a7 Q6 ~  W8 c' G
  14.     id : 14 x9 ~$ k4 ]7 w( o, \. a7 w
  15.   }; C$ {" b. P5 u1 c/ a/ t
  16. })/ y/ C' Y1 \" W' }1 D
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    - W7 j- I2 T* z7 j7 ^' L! I% E- }  [
  2.     <p v-if="seen">现在你看到我了</p>) u0 `5 ~( m: ^* b2 r
  3. </div>+ W4 G2 M" r/ ?, D1 \$ m
  4.    
    . d; O; o! n4 E' m$ l% g
  5. <script>2 Q$ Q9 o2 {7 U$ T, T8 ]+ ?
  6. new Vue({
    7 |, X3 x* L! ^# G+ }" V  B8 n
  7.   el: '#app',
    : N1 }$ {$ F% n! o( n
  8.   data: {. h- p+ `5 @! [3 V
  9.     seen: true
    7 d# x' @, p0 ^# B; V0 p* E" e
  10.   }
    ; }& _3 }9 J$ z7 c' \! _, _4 Y7 y% Q
  11. })2 Y8 `+ F" @/ s! W9 a' p$ Y) i
  12. </script>
复制代码

0 a; y/ k5 F. J. G3 F* s$ I
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    ' o' B. ^" S9 H2 T! E
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    : |/ m  `) j! h3 G( l6 l
  3. </div>  R. H+ m+ R6 _( I  |( J
  4.    
    / o) |; q. d& A4 P4 E
  5. <script>, J6 O8 h+ [- e
  6. new Vue({
    " L* n9 ]+ J9 d
  7.   el: '#app',
    3 I; |4 `: M/ X, A
  8.   data: {* a; `0 I8 y- A# \- U& @# W1 b
  9.     url: 'http://www.runoob.com', M+ P! F2 ]0 W( b
  10.   }* ^# m- \  z/ ~% N/ ~: _! K# d$ s
  11. })" w9 y- Q: I# H, b. d) @  n6 q
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

' S1 m( Z# K2 O6 W- x
  1. <div id="app">
    ; y2 L$ w" m5 L
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    3 R& x: `- B$ [* I# ]8 \$ p9 H
  3. # H) X/ f; ~5 C' N3 l$ \
  4. </div>
    & l; u) ]6 q/ ~% U1 O! M% k
  5. - L2 g) M  z0 l- k! b0 P
  6. <div id="app2">! D0 C* F7 `( s
  7.    <p v-for="val in arr">% S4 F" c, I* o5 L* v! ~8 r$ @
  8.     {{val.a}}
    " A5 s6 C7 ~$ e0 x1 O4 t+ N
  9.    </p>
    # g, S* o* D( [! N/ w8 M; e/ }
  10.    <a  v-on:click="tap">点我</a>) E4 y. M5 r" M& D1 x
  11. </div>
    : t+ R1 L" U- |7 d% c/ @
  12. " |% \6 Q% X& n/ n' h" [

  13. 5 c2 F- S- v% q) G+ o3 u2 u6 {
  14. <script>/ T6 S% {& Z  h
  15. new Vue({4 x5 g* A9 f/ O; B- Y/ r+ z
  16.   el: '#app',1 A( W& O3 h5 l3 d  K, F
  17.   data: {
    7 l, z# g* s; f0 c
  18.     url: 'http://www.cncml.com'
    , f7 L. a+ _, f: a) E
  19.   }
    0 \5 F) Q; w% B, n/ K; Q
  20. })
    " A, C, X5 N3 q1 S) D  R8 t. u, o
  21. new Vue({
    4 Z7 x0 B7 M  M5 t) h( M1 t2 b
  22.   el: '#app2',
    2 C: |3 {$ C7 p+ K
  23.   data: {
    9 I; @1 f+ L9 i+ l
  24.     arr:[/ X+ m9 y, R0 m+ ]& M! P) j
  25.      {a:'bb'},
    - c3 T0 O3 c$ d" o& N
  26.      {a:'cc'}
    3 n1 o  e% [& t7 ^5 z8 w
  27.     ]' l9 z* o# z* q1 o) [* o
  28.   },0 X& [# j1 D) x; Q. v5 _
  29.    methods:{( v  f/ J8 F$ p' {
  30.     tap : function(){& ]3 r8 f0 B& F
  31.      this.arr.unshift({a:'new'})
    : }) v! L) ]' d% Y- L. d0 t
  32.     }
    # s% R8 \$ B6 ^3 G
  33.    }1 l' |. |8 M! N3 t0 Q
  34. })) e, z& h( X. q' B1 ]" ]
  35. </script>
复制代码
, Q. w7 `- G  n) ^$ n" g' `( K
( ~0 x) m1 v# K9 e' V+ N) C' Q
在这里参数是监听的事件名。

. o# Z" M+ I% B% x  E1 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:56 , Processed in 0.076251 second(s), 23 queries .

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