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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12462|回复: 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">
    ) S  Q( \4 t- s" K1 X/ Q2 r9 _1 M& h
  2.   <p>{{ message }}</p>* c' a5 H& d0 a+ a8 h
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">: p0 C9 n2 {4 T0 d& A/ t' N* V' t7 K
  2.     <div v-html="message"></div>
    2 i; I* e5 ^0 p2 v  t4 l
  3. </div>
    3 K+ C' Z: r& V" U/ b
  4.    
    ( M* [: D6 }3 L7 G8 N6 Q1 N9 M
  5. <script>
    ( r! H4 _4 E" d8 e: L4 x/ M
  6. new Vue({$ @/ Z/ c* {1 S/ |- B; f
  7.   el: '#app',8 ?: c; J, w6 V  C3 c1 d
  8.   data: {
    - y7 I. s& h7 B
  9.     message: '<h1>菜鸟教程</h1>'( f8 N' D# w8 S8 d, [: H
  10.   }0 O0 E- O. ~7 S7 B5 a7 p. R$ j
  11. })
    / e% `5 H2 w0 \% o/ L, ^
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">/ i7 J* r8 s* f7 w- J
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">3 ?/ c: X' }% u" J
  3.   <br><br>
    4 h+ h% {/ ?+ @' u- Q+ p
  4.   <div v-bind:class="{'class1': class1}">
    " M& h- s! L, K
  5.     directiva v-bind:class
    ! S3 |, ^  o( `$ t% X: J1 P: v8 S
  6.   </div>8 _6 g/ ^: i0 B6 \% n' O/ }; }
  7. </div>
    " n) l; j! ]4 d. d+ y
  8.     : C3 x& G! P6 c/ z% l( z+ Y
  9. <script>
    " m, Y6 ^4 b: |$ K' _; ?  _
  10. new Vue({
    7 \6 Z3 S( u( F
  11.     el: '#app',
    + d! a, M: a( ]; `& c' S
  12.   data:{
    ( t# f% c1 s- @7 }
  13.       class1: false
    + E) P, e6 l- I) K8 w9 |; I
  14.   }1 d5 s- b8 A+ t: [& a1 N3 l$ \+ j+ C
  15. });% m8 W( S! Q1 o* M1 P& D) }- E
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    & s: A6 D6 W: ^7 x9 w/ x! f
  2.     {{5+5}}<br>4 D: R, a% ~" n, n) `/ {" ?
  3.     {{ ok ? 'YES' : 'NO' }}<br># A. f4 V: |" m2 R+ f- d1 {
  4.     {{ message.split('').reverse().join('') }}+ g. x: ]- M0 K$ `/ m& A, [$ c0 `
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    + D, [' H. x4 D6 @
  6. </div>
    ! U$ c& m1 C  @* Y
  7.     $ Z# p* i0 a, ?' j
  8. <script>6 {# H( K/ g1 ?$ z7 q) [# ?
  9. new Vue({& o$ Q; N  I) P6 Y) f
  10.   el: '#app',* b' b: B2 q" P- J% K# {
  11.   data: {
    6 P9 u% K9 q7 D5 l1 }
  12.     ok: true,
    : {. P/ h* |6 R3 N$ {, _
  13.     message: 'RUNOOB',( F" J! N3 d1 P$ M7 Q- S/ C8 i
  14.     id : 1! c! A3 y' {& d7 M9 V5 K& {
  15.   }
    ' r6 R, Q$ G9 k( P) h. z
  16. })- l5 \: x$ q0 z5 u. X
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">$ U& Z' o; K6 ]" ^5 @7 D# D+ E5 Q
  2.     <p v-if="seen">现在你看到我了</p>9 o4 m: [. K6 k* p0 J5 b
  3. </div>
    8 u" l+ H* I! \( Y; i4 w
  4.    
    8 ]. [* e& N: ]5 t: g
  5. <script>
    * h0 c4 b7 v; ]- @8 d
  6. new Vue({
    4 i8 y0 W3 U6 ]4 w3 f. Y- r
  7.   el: '#app',4 l- C7 g$ c) p% p6 e9 g
  8.   data: {
    4 k1 a# X6 e6 p" p
  9.     seen: true9 p8 W% B" |6 N* w* d$ T; J
  10.   }2 u# T* W" t) I# ?) j9 h
  11. })
    ) p, f3 \$ z% l: W9 k* s' _
  12. </script>
复制代码
% Q0 A/ M- s. F9 r5 T. p0 e/ r
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">! B; ?" D' ~( f+ c5 ]% W
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>8 t) e5 L3 U1 p5 d$ O; y
  3. </div>
    1 |. l& p( E$ o1 @; m2 ?
  4.     ' O/ N7 Q) Z' S+ K. Z8 W
  5. <script>, D0 f# X! |- J+ `
  6. new Vue({
    8 q9 i: x" B1 M
  7.   el: '#app',5 ^7 H2 l/ o9 e
  8.   data: {
    " |. L) a. }. r0 U
  9.     url: 'http://www.runoob.com'
    # U+ F7 g" j3 G/ k
  10.   }/ i5 j. e- f$ ]3 R; }1 \' L8 t
  11. })
    & W, J' f# c6 v/ Z* Q
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
' V* Z1 z: t) Z% Y) d0 g& o
  1. <div id="app">
    4 O/ @, J1 }4 ^# A, k, \2 A
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>: f8 P1 _+ }! k, g; y6 A

  3. # K7 C) U! N$ m6 X. C! f
  4. </div>
    3 y$ [0 {& O' l) v. ]
  5. - k8 s( `' v! c% ^+ o
  6. <div id="app2">
    , F. l$ x+ C* b' T& e# O: m
  7.    <p v-for="val in arr">, }7 V8 E- o3 `/ E% L. V1 k
  8.     {{val.a}}
    0 q" y" O: o* m0 I( J3 ]9 ?* L3 ]) w
  9.    </p>
    * S- u3 z- q' s
  10.    <a  v-on:click="tap">点我</a>2 {3 p" |1 _( ^) \! b
  11. </div># }0 V+ ]7 T* U+ k# S" S
  12. % j3 |* ~' _- l( ^6 x

  13. ' ]; B, S5 _3 o5 |$ R% Y) M
  14. <script>
    : R2 |1 W9 t+ m8 r
  15. new Vue({
    ) l3 d* y. `% \3 P4 ~1 n
  16.   el: '#app',' l* K- v. O7 p% h, |
  17.   data: {
    3 x& w: H9 ?0 ]" ^7 S. N
  18.     url: 'http://www.cncml.com'
    - ^6 V9 u4 M2 ~8 a6 w
  19.   }
    7 w3 c9 B1 }7 m6 E+ ?
  20. })( I* a" H( {" s0 O0 U
  21. new Vue({( j0 o! C1 N; q5 A) Q' ?
  22.   el: '#app2',
    4 d7 }3 {/ Y. J
  23.   data: {- i5 L, `& w" m+ W: w
  24.     arr:[3 T4 x! c9 [9 H! e
  25.      {a:'bb'},. A1 a* m4 w/ R) i$ s/ @
  26.      {a:'cc'}8 [# ^5 C: P3 V0 M/ d! n5 I
  27.     ]
    ) g) c: r" F0 |3 B* v& p1 \
  28.   },
    ; S8 q& Y( l$ \6 b
  29.    methods:{
    $ D7 X# A2 ~9 }4 e7 \' [9 q% l% X
  30.     tap : function(){4 ]/ D1 h0 |5 f& c# g
  31.      this.arr.unshift({a:'new'})
    3 \2 q2 W/ c6 _; K8 c/ u! @7 p
  32.     }' e. O2 n* L% n# b
  33.    }
    6 M% d9 ?9 G1 P" @6 ^' i5 N
  34. })5 ~6 V: q8 k' L: J# _
  35. </script>
复制代码
, _2 G+ U' q3 w$ U

# P# G: L6 W2 g2 ~& Z3 L
在这里参数是监听的事件名。

* V- R$ M8 }, p2 A% s1 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:08 , Processed in 0.135844 second(s), 22 queries .

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