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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15522|回复: 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">
    : x8 `; }+ r/ c6 A
  2.   <p>{{ message }}</p>
    " ?7 {+ ?) i5 e# {
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    $ G% n  R5 k0 `/ d# K3 h
  2.     <div v-html="message"></div>
    4 t. W& ^1 ?4 K7 B" e" X/ L
  3. </div>
    1 n5 L. X" O4 g" A, |1 c' J
  4.     ; {4 s9 E+ u1 X9 X  ]2 F
  5. <script>- Q9 s0 J$ |- F* o. k- L5 c
  6. new Vue({
    ) I; {5 }+ Z: H" u! b; C2 I
  7.   el: '#app',
    ( G1 i0 s( \( Q/ z% f5 b
  8.   data: {
    0 `% H% I4 i% a4 A! V6 l- c
  9.     message: '<h1>菜鸟教程</h1>'. d3 O, [3 r" j# o" x# q
  10.   }
    " x- C" x- X( W: a
  11. })0 s6 U1 K+ k, Z9 s" R* p8 g
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    / L7 ~3 ^& l7 L6 r+ x9 e; ^
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">7 B8 k! V) k; f9 g
  3.   <br><br>3 }# r* x8 W9 K8 ~" Q8 b: ~9 k
  4.   <div v-bind:class="{'class1': class1}">
    0 i& A, X- |" p& w
  5.     directiva v-bind:class% m$ J3 q) N: G" d5 T
  6.   </div>
    ; R6 K. O  I( u( {; c$ P5 s, p* _  ]
  7. </div>& r" |! c; q3 |) m
  8.     % G5 l' t8 R- `5 ]9 H0 N
  9. <script>
    7 l; B6 {+ v  g. M! I' B
  10. new Vue({( i8 a1 x( E2 Z% B4 ~6 n8 b
  11.     el: '#app',
    3 f; i8 w5 N% y6 M! D/ O# W8 H
  12.   data:{
    9 @$ x- z6 A! e9 ^3 N
  13.       class1: false/ Y( G( r& `( a
  14.   }
    - U, m" o% b& A, J+ T
  15. });
    2 [& Z: v' Q& N
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    6 G) Q7 k1 z& h$ t4 D, y
  2.     {{5+5}}<br>! L3 y; Z( H& {' k
  3.     {{ ok ? 'YES' : 'NO' }}<br>9 H% Q  w) O% X3 o) Y6 t
  4.     {{ message.split('').reverse().join('') }}
    9 H" q- n7 w1 H
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>0 \: |" @3 o" L4 q
  6. </div>
    - u3 A$ p- a! a
  7.     . e$ k$ S% m8 f1 W
  8. <script>) k  K3 \! o3 k" i7 x
  9. new Vue({% w  b" f( U1 w6 |7 f- u, p
  10.   el: '#app',
    $ G+ v" }1 U  P# {1 v$ P
  11.   data: {/ C7 n) W# X6 M) f
  12.     ok: true,3 o/ {  h  T( X! t" ~( Y
  13.     message: 'RUNOOB',% q! Q& s* S4 _# |5 A  s0 d* Y; }
  14.     id : 1
    / s; x( }2 T3 O$ k' i4 W
  15.   }5 |/ I5 u2 a6 R1 k4 _, a0 _2 A
  16. })" W4 C4 R; u0 Q; x9 B
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">+ O$ M5 r6 I' Y" k2 h$ A
  2.     <p v-if="seen">现在你看到我了</p>
    / d& Q; j% C- G3 T
  3. </div>& {+ C2 m1 w  h, a- O1 x+ J& P
  4.     5 ~, h1 r; k' X. J
  5. <script>" ], X$ L  E+ ?, X3 B, f
  6. new Vue({' h! m1 g8 X$ I* w6 N3 t$ ~) C
  7.   el: '#app',' {9 e- o- ~- J2 d* k4 I+ n4 |4 K
  8.   data: {1 c- g4 }% J3 ^, P6 \
  9.     seen: true  c/ B# v  d! I
  10.   }/ p2 c$ K- m) f6 `/ |* _. W4 o. X
  11. })
    2 c8 o+ s' ~1 ?# ~, i
  12. </script>
复制代码

& q2 h3 M7 [# h( ]7 U  P
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">( T: o4 A9 g; o
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    ) a+ q2 r. C: j( F9 T, P
  3. </div>
    , o+ _  S3 J0 m3 ]0 H" Y
  4.       W$ u1 q: _1 _2 ]* w: s2 w4 D
  5. <script>5 |- _% N7 D$ s1 @" U
  6. new Vue({
    0 W: U7 a5 ]  [: k
  7.   el: '#app',+ t5 s5 i: L' Z5 J  k
  8.   data: {
    ' j6 |. G) v3 N
  9.     url: 'http://www.runoob.com'
    3 y, z7 V8 n( C
  10.   }
    . O; P" r7 C3 _( d, [4 r& A! Z; j
  11. })7 b) I9 [, }; K( ]  n
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

& d; e! m% V/ C  C5 P0 R
  1. <div id="app">
    $ B6 V3 i9 u% X; b) b
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    1 c' Z. v; Q; _  m. K7 k- P* p9 l

  3. - |0 L! ]' l; ?% p' k; A2 E, m
  4. </div>: J  K, h# [: L
  5. : s- f' o8 H% ^8 W% C" m2 S
  6. <div id="app2">
    6 o; D4 \5 s3 n( {0 e' O* N3 f
  7.    <p v-for="val in arr">
    2 c( Y. K  q( J2 M" |; p
  8.     {{val.a}}
    & H& a. `" k, I) P' e0 {
  9.    </p>6 t( @* Z/ r/ ^; ]
  10.    <a  v-on:click="tap">点我</a>
    ' T: t+ D2 i/ x: r
  11. </div>
    - X2 `$ y( r! K' I
  12. - X  l+ b9 p- ]3 i

  13. 3 \! S+ q1 G- C# t& i
  14. <script>
    7 ^$ n6 V& x6 {5 _. W
  15. new Vue({
    6 y! ~9 F. |. W4 R5 n
  16.   el: '#app',
    / n$ g0 X. h; l+ q& A
  17.   data: {
    5 J2 l3 ?" |! Y: G; F* s. i' v
  18.     url: 'http://www.cncml.com'
    1 [, j- ?% Q: @/ k0 S+ m. K
  19.   }6 d9 R6 y- Q& t# s' N8 \2 R/ d3 T
  20. })& K1 O9 X/ i5 u; Q
  21. new Vue({/ q1 \# S3 e7 O1 c0 t
  22.   el: '#app2',
    ) j( ?) }4 n& F
  23.   data: {
    ' x5 r; n1 {, a; B# D& \- D1 K
  24.     arr:[
    ! r+ L- a7 p/ O
  25.      {a:'bb'},
    4 y. R  R5 }" v
  26.      {a:'cc'}% W& K1 V  l* d( i6 s3 y9 E
  27.     ]
    ! {9 X, [" f- h7 ]( b
  28.   },& s  ]* V- E) m0 y) `& a6 l
  29.    methods:{6 E. A; ]9 X0 {
  30.     tap : function(){
    ( ^) l1 H; s" [
  31.      this.arr.unshift({a:'new'})) q. I: _# O' C: G- n# L& `
  32.     }% R+ f) |' A" b4 Y4 u% x) h' ]( O0 {
  33.    }2 C& y$ Y* `) D4 o6 O2 J
  34. })
    ' r% j6 e: s7 g0 Q: W0 q1 U  q7 U7 ]
  35. </script>
复制代码
1 d% O6 O, w$ _0 P' b; G- L
/ S7 P  I' g+ k% r; ~2 N3 q' ]
在这里参数是监听的事件名。
) G& I& Q/ R. q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:40 , Processed in 0.058118 second(s), 22 queries .

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