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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15348|回复: 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- P, w7 H, M- a# Y; I* m, M* K
  2.   <p>{{ message }}</p>' B! W' ?2 F! Y. W
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    . y( e1 |, G/ G; n5 e
  2.     <div v-html="message"></div>
    0 J( R  k0 {4 f' C
  3. </div>& ^4 F, E) [1 q) Q
  4.    
    & I2 o, ^$ F0 u- U8 A
  5. <script>
    ! j" b4 `% h$ `" e7 E
  6. new Vue({
    # t7 h* v, H( S
  7.   el: '#app',
    2 I+ j. u4 S& K# o! q
  8.   data: {
    3 t6 R. o/ I1 v, }
  9.     message: '<h1>菜鸟教程</h1>'
    0 B$ @- o/ ^+ a! B% _7 ^3 _
  10.   }
    5 [6 S* F( c  Q# y- Q. w9 F% o
  11. })
    . K2 l1 l- K/ Q3 D! x) G7 M
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">1 k- i' V$ f1 P+ r0 P: g
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ; G( C- w+ `3 J' o! Y! [' q! n
  3.   <br><br>9 d& h3 D# \! Y4 w
  4.   <div v-bind:class="{'class1': class1}">
    6 V0 M& n$ U5 `% e* p
  5.     directiva v-bind:class
    $ N- O" ~" g, B' P  c* ~# b
  6.   </div>
    " w" g& P  F1 P2 M3 Q6 U4 a
  7. </div>. X1 m# B* j' V1 \" i0 x
  8.     5 m2 a/ t0 q& B9 M1 T/ l  v/ u
  9. <script>
    ; }) L( X' I6 k" j& g
  10. new Vue({# n  c, d1 t! y- M- s
  11.     el: '#app',
    ) J# t1 J% F5 r/ s# E
  12.   data:{
    0 ~/ {1 X/ X' Y0 L( [
  13.       class1: false
    & ]# b7 ]9 d8 R$ d, y% w
  14.   }
    , m, R  N- l" ^3 u7 B9 j& @
  15. });
    - p3 K6 _' {- v% z) O
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    & v/ ~1 c  g$ R- x
  2.     {{5+5}}<br>: p  _$ M+ D+ _' A  h
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    3 P/ L) q! V( r' @% O
  4.     {{ message.split('').reverse().join('') }}5 e9 e+ ~* d1 ?. D/ A; l
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>/ x3 \+ ^6 k* ]6 p
  6. </div>
    " _5 n% E' J$ E$ E- G# Q, {3 O% o
  7.     4 c6 q7 }# v: ~* ~: k' _
  8. <script>
    7 X% j7 B. y$ {, f
  9. new Vue({
    & ?' i% j% }6 o4 ?7 W& u
  10.   el: '#app',; E  L# ^: d5 |. Z+ m) ]- l
  11.   data: {
    - R3 s0 J6 i* C5 \3 e
  12.     ok: true,3 J6 z/ c- M, z
  13.     message: 'RUNOOB',) L, t' K" M/ I+ e) V! H0 M. X
  14.     id : 1. g9 @& M9 l; P4 h- f
  15.   }
    - U: Q* d, y" m# |
  16. })8 T( K: @! q. U" m
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">& e6 Q; T' U( `3 g( N6 L& ]/ _1 g% @' ~
  2.     <p v-if="seen">现在你看到我了</p>
    ( W6 o8 a+ \6 I; l/ W4 q  }
  3. </div>
    ' [: H# J% ]" b6 @- E  ~7 p
  4.     6 g% |! \1 s+ s
  5. <script>
    7 R/ K9 g7 M5 x' y' f* f
  6. new Vue({
    , b" }% a# `1 I7 ~+ X. u
  7.   el: '#app',# q& s0 d, H( `, ]7 r. t# u
  8.   data: {
    7 L* v+ F* U7 L3 C/ I
  9.     seen: true
    / G1 E. @9 Y. N
  10.   }
    + L. G4 k. k5 i5 s7 n# B
  11. }): B3 v  V. x- o. ]4 q
  12. </script>
复制代码

( J8 a$ p8 h: l) M# r
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
      `! H+ b& }2 R" x
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>  F8 p* N8 [+ h" g. Y
  3. </div>
    - ]2 `* f% r9 J& H2 l9 v
  4.     4 [2 p9 e8 V# p8 [; G
  5. <script>) ^0 P6 Z7 ?5 Z% p* P3 v
  6. new Vue({
    0 O8 o! @7 R- m9 Q( C! g( j
  7.   el: '#app',7 d& V6 C1 D) a: K- ]
  8.   data: {8 l+ I- e1 }+ \
  9.     url: 'http://www.runoob.com'* F, Q& \# y; |# [
  10.   }  @+ u' o2 c9 x. z0 h: e
  11. })
    , Q% C- C1 U- @; B& ]. i' W: I
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

8 B' K% ^+ g9 x& ]6 O3 Y0 x6 j
  1. <div id="app">
    - [7 W  S2 u; b9 n- u
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    ' A4 }+ @7 B/ R. e

  3. 7 s& p, a% t' `. t6 l1 N) \
  4. </div>
    : D! B1 S8 j; d8 S  `
  5. , Y4 e' O  O7 n; O
  6. <div id="app2">( s+ k+ Z! `/ R1 c4 u! Q: Y
  7.    <p v-for="val in arr">
    7 [( ~" U" }5 G9 q" x8 q+ s
  8.     {{val.a}}: {6 X" v0 q+ d! P! y+ g
  9.    </p># H  c; Y% K0 u1 o. F6 k
  10.    <a  v-on:click="tap">点我</a>/ Y5 ^2 B! K) i
  11. </div>5 p- a4 B7 ^! Y/ H- x+ @/ M/ h( K
  12. 6 h2 }( y" X2 k9 ^
  13. - L( v- s7 t; ]' o5 _" J
  14. <script>( y( W/ O5 b2 f3 W% p- f& @
  15. new Vue({' e) ], U$ r1 N6 f; W  ^' _
  16.   el: '#app',
    / w/ A" r6 S; a5 Y% R: u
  17.   data: {
      L6 e% h% a( H6 E) y
  18.     url: 'http://www.cncml.com'
    - K" H! J! L- X+ M8 y9 l
  19.   }/ g/ J: Y; f& o; q5 a4 K$ R
  20. })3 v! r/ N, K6 K2 U$ W9 c* |
  21. new Vue({
    3 ?0 V1 f: g7 B$ C  X  q7 n2 z
  22.   el: '#app2',
    3 h2 U" d6 z) }: }: e& g
  23.   data: {; i% n7 e2 f% D* b' a
  24.     arr:[% F1 V1 X' |( W
  25.      {a:'bb'},
    * l& ?$ Y, V; g9 R3 F
  26.      {a:'cc'}
    " m! s0 A9 R# @, j# f0 ]3 h
  27.     ]" A7 \- b8 p) C2 `. g. f6 ?4 F
  28.   },
    % `, j4 H; w+ S/ ^, V/ J
  29.    methods:{" x9 R( y( b' h% I6 V9 b0 ^9 q
  30.     tap : function(){
    " v  e/ M" W5 D( J; @
  31.      this.arr.unshift({a:'new'})
    # h# d( M5 m4 g
  32.     }% P( y. z+ f, S& p+ o; |5 z  `% ?( t
  33.    }$ @) X% N! _# r3 S' }% a) g* y
  34. })% z$ d* b* ]5 E4 F# [" Q
  35. </script>
复制代码

& C; F, S6 t1 a3 ^2 a1 n

) y' I) g# [# ~5 S. t6 h9 n
在这里参数是监听的事件名。
/ m+ ]1 i4 w  X# |) R& m) h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-4 09:28 , Processed in 0.065155 second(s), 22 queries .

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