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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10719|回复: 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">
    * {$ Y7 m- V2 Y
  2.   <p>{{ message }}</p>% q4 a) o  w' q0 @& a
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">1 u. g* h, n2 `* S: ^; |  K
  2.     <div v-html="message"></div>& b% ?/ p% _3 E, e4 y. v
  3. </div>
    8 n. C7 P# Y2 N7 }( Y
  4.    
    # P, a  o4 [" \# h! s4 \
  5. <script>
    4 Z4 i0 k* O$ l" _2 R
  6. new Vue({% v4 d& P% D# d" `( ^6 I
  7.   el: '#app',, D2 ~) K7 A! C, n
  8.   data: {
    . `$ M% {- W; g2 b( C% X) n
  9.     message: '<h1>菜鸟教程</h1>'
    . K9 M7 |' W0 J- e
  10.   }; G# y/ c& i# b) h5 n
  11. })
    0 v# d3 D9 L* j9 Z
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">; m1 h8 G/ m2 G6 U/ U$ Z' q  N
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ( U& E& S  q( Y; j1 G" D: o
  3.   <br><br>
    , u& e/ e, e$ B4 }. d. _! z
  4.   <div v-bind:class="{'class1': class1}">
    7 k# C6 M. a( J$ V- b
  5.     directiva v-bind:class: F: R0 e7 f! [% ^1 s* i% u5 I% b
  6.   </div>
    ( N2 L/ }# Z( o7 H2 r
  7. </div>+ \7 Q( A' I2 y  u: ^
  8.     8 p1 B* b' `+ d  `8 q
  9. <script>
    " C; u# g0 {# e0 }% m. }( L6 M3 n; |
  10. new Vue({
    , t) }. M- I, x' a# b" o- v
  11.     el: '#app',
    : z" g& b8 S* M& P. p
  12.   data:{4 i6 ]8 o/ f6 _9 S9 y6 y0 W, Y' H4 [
  13.       class1: false! E* o' y: ^$ `1 y  M
  14.   }
    7 Z) d3 d8 {% W9 D9 A5 Z! t
  15. });# f! m8 ~; O+ O5 X2 Q& ]
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">7 S. ]2 y% O; z
  2.     {{5+5}}<br>
    $ @/ c+ n. g, ?2 ?
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    3 ^/ z) N) U7 B
  4.     {{ message.split('').reverse().join('') }}
    4 s* |4 T$ H9 a4 V& O( c
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>) t* y* s2 w* }& _8 v& Y" J
  6. </div>
      j3 {& G( b. g- L( H
  7.     " l: b( b. ^2 ]3 c/ B' I( E
  8. <script>
    : U4 G: J5 f1 a% J+ E- e$ ~, k
  9. new Vue({; @) C, M! h0 \$ x" v
  10.   el: '#app',
    ( O  C& k/ C5 @( A
  11.   data: {
    7 ?7 b1 n) h2 K( N  J
  12.     ok: true,
    : s* D5 ?+ `2 J$ n0 \4 S& m  I9 U
  13.     message: 'RUNOOB',
    7 ?. a2 u  y' q
  14.     id : 1
    6 ]1 a) k& Q% z
  15.   }2 M! f4 u) \. U  |) a
  16. })) M' L5 b) C" S
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    " }' L5 L+ Q% F$ S( v" `
  2.     <p v-if="seen">现在你看到我了</p>9 B/ o# ~5 E3 j9 t3 y7 H
  3. </div>
      \5 I5 f  h! L6 [; @
  4.     ) }; }+ d! u- N* k4 O' B
  5. <script>
    5 X& M- T3 ?5 R8 @! C8 J; g
  6. new Vue({
    - |( E; J$ k5 @# x7 C
  7.   el: '#app',
      r9 C' |6 i7 u
  8.   data: {
    # r, e( [* U) ~! M/ a
  9.     seen: true6 {$ z5 ?. O4 w- @, F
  10.   }
    1 X7 F$ O$ k. g
  11. })7 W$ _6 ~# j! G% t+ N
  12. </script>
复制代码
0 S( u& L0 ?$ u9 s1 |0 R3 @
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">0 v2 i0 v4 Y$ F- R5 b9 L
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>( h: ~& a4 Z2 x- R0 c8 F
  3. </div>2 n- ^9 d: u, `, u4 O
  4.    
    ) p% |) [5 p2 M) e1 m- v
  5. <script>
    ; A+ d3 c/ i) t
  6. new Vue({& s1 a% K! H7 p: c
  7.   el: '#app',  J+ u6 ^- W5 G& q. ]1 k
  8.   data: {% @& B# R) k( B9 z$ I5 \
  9.     url: 'http://www.runoob.com'' |: c9 w' Z) v0 F, w. e3 N
  10.   }$ G8 L, i7 Q+ W% i5 [
  11. })
    + S: h: H( m$ d: J4 q! g
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
" u+ `, ^6 ?$ T/ f2 t
  1. <div id="app">1 C3 {$ V' }9 k8 k
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>+ X8 \3 H8 _( j; V

  3. + z: u* }0 ?5 s1 J+ e& [0 A& c
  4. </div>  \- a$ ]* c- z- ~, \  R: ], y/ G

  5. 7 e: `1 p. S9 C0 s% o
  6. <div id="app2">
    6 y2 v0 n" }% [( C0 Y) D
  7.    <p v-for="val in arr">, l; _& E* Q4 z- F
  8.     {{val.a}}  {$ |" b  z1 K) B) X# |
  9.    </p>/ D/ X5 K; B' V3 h) G
  10.    <a  v-on:click="tap">点我</a>
    * l" |! r1 g: y( u4 d0 e5 V  K& r
  11. </div>7 G! I1 c: N# c9 W1 E! a0 q

  12. ! M$ G! p. I: _0 s9 S( e( n

  13. 0 [9 ^3 M7 N& T: ^
  14. <script>
    , f8 J( k5 n7 A( S) {  F
  15. new Vue({
    : J1 d! x3 E8 {9 n  ]4 B- v) i
  16.   el: '#app',
    5 W- X, e3 d: }  z% v7 j
  17.   data: {
    : M8 i$ _/ p/ U9 I
  18.     url: 'http://www.cncml.com'. _, T2 p$ c! ^# ?7 m/ l- _
  19.   }
    6 E7 ?' h+ S& S; \0 \& f
  20. })/ p% n1 N/ m2 o* X, C3 F  m
  21. new Vue({2 X: G8 E% e9 b0 p
  22.   el: '#app2',
    - c2 k: f) o3 |: f. s% y0 k
  23.   data: {# q$ H; n/ y. g4 o0 \$ F
  24.     arr:[0 F9 @* _+ L% N
  25.      {a:'bb'},
    5 H, y5 B: \$ ]+ K% S
  26.      {a:'cc'}6 ?4 a- e4 b8 ]! N5 {  r
  27.     ]
    0 }' m! T6 \5 ?* x0 W
  28.   },
    4 h% ^  l- i! p- @# x( _) L5 T8 x8 \
  29.    methods:{
    - t. ]2 U* X8 r2 x: e& S* x) n$ y
  30.     tap : function(){3 i" n8 A' F8 _
  31.      this.arr.unshift({a:'new'}). z5 c, R- |3 |' U
  32.     }
    3 w3 O: {3 v( H& I4 W% f7 m! F( i
  33.    }+ X( H0 {- D1 ], |, i; i% q. }
  34. })
    # k9 B2 W& @; U% k1 K) @
  35. </script>
复制代码
" q6 A4 C3 ^+ H! i; N
# c* o( W( s+ m; c' f- U0 Y
在这里参数是监听的事件名。
1 j5 r0 z- x% L3 S( ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-15 15:29 , Processed in 0.149105 second(s), 22 queries .

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