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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14877|回复: 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">: Z( N' n; Q' |
  2.   <p>{{ message }}</p>
    4 S2 ~: q- F* l4 \9 s9 E& b
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">5 p/ f$ W+ F" E3 K
  2.     <div v-html="message"></div>
    # T; O0 J$ R' V* Y' r8 x1 i5 G
  3. </div>  ]  E. X; C1 N; S
  4.    
    . `+ t: V$ \' t* ?/ [! B
  5. <script>/ U! W7 F: V5 C7 G4 }  P2 Q
  6. new Vue({
    6 }5 M' D( W! n4 Z
  7.   el: '#app',
    9 S1 t6 x; q4 y: A/ }
  8.   data: {6 F' k  p' k# f
  9.     message: '<h1>菜鸟教程</h1>'; W7 j% T, J4 C) z1 ]! F: B
  10.   }% o  U- e! D# f0 R: n; R
  11. })# O& o5 A, U" e& P
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">( a2 G/ g1 X# c7 P& V% ^) S
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ; B" R4 Z' Q/ U
  3.   <br><br>
    $ h9 ~0 z) n$ U! s) d1 s
  4.   <div v-bind:class="{'class1': class1}"># r/ a& p8 R5 D
  5.     directiva v-bind:class
    ! N2 x& ^8 v+ h! k
  6.   </div>
    , J; `* Y4 Q6 i- `7 V( l
  7. </div>
    * E/ J; e- c# M: X" T7 \
  8.    
    - E: O6 L9 U- z- L1 @
  9. <script>
    0 L% H0 H+ j; j2 u
  10. new Vue({9 o2 K# @- E$ `; x$ J! e
  11.     el: '#app',3 P- e4 C8 Z5 F" b7 d' G- c
  12.   data:{) u+ d, V! Q' I  l4 R- c2 g; K
  13.       class1: false
    : s) Y9 C% r2 m& |0 h' N) G3 I
  14.   }. h% `' u* {- g# W+ V3 z
  15. });
    2 a. v+ t: K! I' G  P: Y
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">5 G3 S8 y" e* o6 M
  2.     {{5+5}}<br>6 B6 z5 ^* N/ }  S
  3.     {{ ok ? 'YES' : 'NO' }}<br>: A' U- A, U2 C* e1 {
  4.     {{ message.split('').reverse().join('') }}
    7 @  t" y3 P9 {% ~0 T
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    * e! ^: x3 b' S/ Q- x! [
  6. </div>/ N9 T' w" T8 F4 x
  7.     : w9 E" `6 P0 P2 o
  8. <script># ^- d/ r7 V* |( z( M8 E
  9. new Vue({
    7 `5 D$ k, K' v; {7 F4 J# b
  10.   el: '#app'," W) ]3 w$ r, _9 v9 O  J) U2 n
  11.   data: {& r/ R& X. v" J& H/ s" R, ~
  12.     ok: true,# G! v2 @1 n% n
  13.     message: 'RUNOOB',# U  U- c# L$ z, H' k
  14.     id : 1" w4 h2 e4 k# X$ C
  15.   }; e! i% ]' r: Z. `$ ~3 c
  16. })
    ; E( g; M3 \2 |5 }
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    : N; d/ t% J" W9 Q7 I- |5 G
  2.     <p v-if="seen">现在你看到我了</p>2 v7 e1 _% T9 m- e. }- _; M. R+ l8 P
  3. </div>$ X6 z7 A/ G3 U5 k
  4.    
    ; a' M  O% }% ?+ z8 b* G' }8 l
  5. <script>
    ; G. P! N; q9 P4 Z6 j. d5 O
  6. new Vue({
    ' `8 V: @4 [2 o) a: ^; W- J8 C
  7.   el: '#app',
    ( B/ I+ y' i6 e$ b' }7 \: y! V
  8.   data: {
    ( {( N8 D0 u" O4 ^
  9.     seen: true% B5 |- f4 O+ u& y0 @
  10.   }
    $ C  y: ]' M7 u- X
  11. })0 _8 R+ w" i6 ?+ g2 F4 ^& }
  12. </script>
复制代码
8 Y4 Z, Y5 g8 K; n0 G6 W
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    3 |- L& ?3 A% d
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    4 A: v# P; h- K8 }; x- T
  3. </div>
    % ]8 `& b# P+ ]. U" ^/ D, }
  4.    
    9 Z. s9 T& O2 I7 ]. P  s6 c0 u3 s
  5. <script>( a" \9 x* T8 n3 i
  6. new Vue({  h+ |7 L4 u1 C8 @7 X
  7.   el: '#app',
    , j( Y" e/ V0 C" t1 x
  8.   data: {
    : s8 X' \7 a4 |( F$ I0 Z
  9.     url: 'http://www.runoob.com'
    - @  _- L5 r: U$ F& ]7 a, l
  10.   }
    8 @) U! n5 E+ x' r& r( X
  11. })
    * C. i6 Y1 Q1 ]" A* {5 y1 d
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
8 z+ C' q/ _+ Q9 `& _  \
  1. <div id="app">$ [( T. n: W% r0 \
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>. [4 C/ ?% X0 v3 f+ G$ S

  3. % d" e. z5 w1 K  C+ S+ G/ L' f
  4. </div>1 c6 }3 U, I5 a

  5. , D6 |: y5 n7 ~% [  ~
  6. <div id="app2">
    , D+ y! l- g- R( ]/ @$ ^
  7.    <p v-for="val in arr">
    4 ?2 E5 T7 |7 f* O. b  P" ?% p
  8.     {{val.a}}
    ( m1 f1 [1 n, f8 f& C
  9.    </p>
    . y5 V$ A% Z1 B1 e4 p5 U4 ~) U
  10.    <a  v-on:click="tap">点我</a>0 v( A8 P; r$ v4 T
  11. </div>/ n/ |6 G% B! N5 K4 W
  12. 7 j3 \- a. l( J# n: N* `
  13. : D  `4 b9 Q# u  y- s5 F2 ~, x& Q
  14. <script>8 a2 F8 O: G7 }, {
  15. new Vue({
    . E8 ]# g7 O3 f# c8 G, c
  16.   el: '#app',! g- v/ j  U4 ^! E' @5 h" s2 b  K
  17.   data: {4 \# k( V5 ]% O; J
  18.     url: 'http://www.cncml.com'; h6 o3 g* P: W/ T! x* E' F5 r
  19.   }
    5 p5 r: k0 d# f4 ?: r5 N' R! X! ^
  20. })4 ?) h5 M& c- x) J4 |' z
  21. new Vue({0 r4 x2 s. N/ s8 i/ Y/ {
  22.   el: '#app2',
    ) f/ }1 Q- ?* C9 N, Y- h+ W
  23.   data: {
    / x9 W* W% O" j, r, P1 O
  24.     arr:[
    & Y' G( B' s/ B- {2 h7 b
  25.      {a:'bb'},* C. [  f% ?- K  {/ Q
  26.      {a:'cc'}
    * Q" A2 q. M# N8 u; l0 O9 s  \6 k
  27.     ]4 W5 P, b2 q4 {( @& t# J/ t
  28.   },
    ! f& T! I$ K" m  [
  29.    methods:{
    4 R+ j0 _+ ~: D) T+ R& C; P" P
  30.     tap : function(){
    0 s0 D- w4 G8 A0 \8 x8 h7 v, q2 }
  31.      this.arr.unshift({a:'new'}). x# J! ?9 j1 u+ ]6 t+ d1 F5 s
  32.     }
    3 f7 p, O# _! E# l: q
  33.    }
    9 g+ M& h5 [% L- Q: _% g
  34. })9 X0 L/ @8 c: M0 l& x
  35. </script>
复制代码

$ Q7 c% Z) F% @0 Y* h/ Y2 H# U

' P% |/ h  Z1 D' _
在这里参数是监听的事件名。

$ C8 t* M; p+ f: r9 W) X; S9 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:02 , Processed in 0.057412 second(s), 22 queries .

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