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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15317|回复: 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" X/ m7 t! A! ?0 P' ?
  2.   <p>{{ message }}</p>7 {9 g7 @! M( w. i/ }# }- w/ k: n, k: w: v! z
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">0 z' l& F, g0 F  g
  2.     <div v-html="message"></div>
    9 c' \; g- }$ g
  3. </div>
    4 B/ }# W, w$ F' v" u1 t
  4.    
    / d! J+ o* z7 O* s
  5. <script>; I6 c: ?% t9 k  c) {7 e
  6. new Vue({: n9 R$ _& K5 \% Q
  7.   el: '#app',
    9 Y4 W+ H; X1 Y+ `/ W; S
  8.   data: {) U1 N1 {& c9 \$ B' O* \! v
  9.     message: '<h1>菜鸟教程</h1>'' C6 y- G2 C  y  a' B
  10.   }, ?2 J( t  s: E7 ^0 E
  11. })# L( X1 b6 ]$ y0 w7 X  h5 m
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
      `) R& a  }" P
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ( r8 Z3 w6 M- \7 T
  3.   <br><br>' B$ d; z( ?# H) w6 c' |
  4.   <div v-bind:class="{'class1': class1}"># }% M! o& x6 A
  5.     directiva v-bind:class
    / K1 u$ b7 Y4 d# k0 f
  6.   </div>1 X1 [4 u  y) \9 k) B
  7. </div>
    " ?4 u9 f! v$ s, [
  8.     6 L: [, ?7 F9 v# `  I% ^6 s$ W
  9. <script>
    & ?! S. C' P; W# o: U' g3 v) v$ f
  10. new Vue({
    7 w- e. H; t) r5 q4 s
  11.     el: '#app',
    - h0 p0 \4 @2 w
  12.   data:{
    - a1 i8 [$ {+ }; Y
  13.       class1: false- i* G* W3 Q" R1 L" C# Q, _1 g
  14.   }1 M- R  w- r) T/ t. B# C! G/ `
  15. });
    & @) X! C3 }% s+ l
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">( @5 [3 y& i+ a8 P
  2.     {{5+5}}<br>) c1 e& W0 ~5 h; t& |0 J, |# h
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    9 T9 t4 l: }9 r  y  L5 {$ H! P  S
  4.     {{ message.split('').reverse().join('') }}
    ) w( @4 ~9 {3 l! h6 Q% Q+ x
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    2 q6 p% i& |) F3 c5 H; z
  6. </div>: P  `% J; k1 e
  7.     . u" z% G2 Z; f& i9 C' ?% V6 u
  8. <script>
    + I# D, F3 y5 a
  9. new Vue({
    6 w# T6 V* N7 w* _
  10.   el: '#app',- x2 S* i8 R4 U3 s& Z6 Z# M
  11.   data: {
    2 \4 D* U1 c  K) u) V
  12.     ok: true,
    ( {! `( A9 l5 A  U8 K" K
  13.     message: 'RUNOOB',) i2 n" d% I, k. _. {
  14.     id : 12 q" U" Y' b7 c: g% O4 @# q
  15.   }
    * p$ L, b% t7 m. a' Z  i/ {
  16. })
    # h4 _) ~) v3 ]/ _/ }
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    $ ^5 j* g9 M( Z/ a
  2.     <p v-if="seen">现在你看到我了</p>2 T$ Y2 X6 h: `7 H1 ^4 A1 C
  3. </div>
    1 u% W5 h% S* ?
  4.     ( T. f1 D# u3 X$ t& p: K! m9 i' P5 j  Z
  5. <script>
    5 r$ m; G2 d3 w* d/ L4 g, ^5 m
  6. new Vue({' V( w6 D0 v/ M1 g# K9 O
  7.   el: '#app',5 t2 T( q' [' ?+ L1 {$ i3 ?& w8 F
  8.   data: {
    ) f' _% B! n6 G  x  f
  9.     seen: true0 l1 R( l" x' k" l. T; O  O" ^
  10.   }) Y; Z) i0 S2 C
  11. })
    5 I5 r: j& Y0 p* l6 P1 I  e8 Q
  12. </script>
复制代码

0 q$ A$ O: E, C) J9 `
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">6 \; v: f! {& z) K
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    ( [7 a8 R$ \- Q8 [" C6 c
  3. </div>
      N. x5 F' S: P/ `0 b& M
  4.     / m! Q: `3 N: K; H
  5. <script>1 F" [+ a% e: n# r7 V5 q- v
  6. new Vue({
    ' ~. `; q: t) l0 i- A" @
  7.   el: '#app',1 Z  y1 V4 N' R' N# [+ p) W! S
  8.   data: {
    9 o# u; v9 x* o
  9.     url: 'http://www.runoob.com'
    9 L/ f3 z3 q/ r7 O$ |- \2 R
  10.   }
    ; f4 m9 u5 v4 Z4 i' j+ v% ^* b1 G% }
  11. })0 P% W% A. k) A- y
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
: l! x/ B* Q. Y" m! T& R! q7 Y
  1. <div id="app">8 O  \# U5 {' E! e
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>+ H$ U+ G, {) H4 i% D
  3. ) m* y" Y7 P8 o, {: E% Z, A
  4. </div>6 }& W/ D4 K- \, a7 Q- U& }7 U
  5. ' r6 E! ~2 `4 I: {! Q
  6. <div id="app2">
    " c! A4 y+ G9 ^/ H# g
  7.    <p v-for="val in arr">5 r' V9 Q& |* F, D
  8.     {{val.a}}
    9 G- ^5 q8 V7 ~9 A% }
  9.    </p>
    4 v% e/ x. T$ Z  n5 [% D4 I) a
  10.    <a  v-on:click="tap">点我</a>' s5 L# o! X/ m% Z+ c- l' Y& B  `  U
  11. </div>  g/ L. n7 w( ?

  12. 4 y( @; y( W0 E2 u  e
  13. 9 \9 V% r7 m0 A- l% F; i
  14. <script>
    7 A/ l: x4 ~$ Q- t6 [% F, w7 ^
  15. new Vue({  n6 c4 L% F, u( |% ?& h
  16.   el: '#app',& f! V6 G5 C" d# y: ]
  17.   data: {
    2 H8 H" d+ {9 r; c) f- T
  18.     url: 'http://www.cncml.com'/ a$ V& M6 A2 S8 S
  19.   }
    1 A7 Y: I: G" w
  20. })
    " u5 [7 r3 }7 g, Y
  21. new Vue({! e6 h6 a9 t- y: C5 b
  22.   el: '#app2',% f% r5 u( p" T" q+ q
  23.   data: {5 s/ W  t2 O# A# V& B: V
  24.     arr:[
    & q9 Y5 `9 {6 F! e6 o+ G, j( ]
  25.      {a:'bb'},2 |% T/ Z7 n7 a7 k0 t2 V2 S
  26.      {a:'cc'}$ [) a4 e) y, [3 p6 x1 G$ }* G
  27.     ]9 p3 @& g4 e/ V7 W, U6 N$ y, M6 G) s
  28.   },( I( q4 v4 x+ p
  29.    methods:{8 ^/ u0 P+ q% t! g, U; m
  30.     tap : function(){
    ( W4 f7 ]/ e" z# ~% p- ~/ W
  31.      this.arr.unshift({a:'new'})0 U1 C, L$ C1 @
  32.     }+ r  J* z% e0 H' s
  33.    }6 W. x& J* P! j" G) W8 C8 f
  34. })5 _* F+ n& N1 s. D0 e* Y, }% z
  35. </script>
复制代码

$ [) e6 j/ u; P& y. t5 {
: b- T0 ~* y3 o  W) ]
在这里参数是监听的事件名。

7 E- D" i3 Y. K/ K9 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 14:32 , Processed in 0.055273 second(s), 22 queries .

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