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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15009|回复: 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">
    ! G/ Y' n& C, f# u1 S* ~
  2.   <p>{{ message }}</p>: x! k/ A, l( z! I9 q; S1 W: J$ y$ k0 b! J
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    1 r8 b/ ^3 C* V' u6 [' _, {& J& z
  2.     <div v-html="message"></div>+ z/ [7 e/ R( @
  3. </div>+ A& }* E  Z$ L* S* z9 K
  4.     8 M  |9 a6 q  ^( \* Q4 {5 y
  5. <script>
    6 y4 N) T, R+ Y
  6. new Vue({4 j3 e. F  X' e5 S2 S
  7.   el: '#app',; l9 ^3 m# |! X* z- s, T6 z* G
  8.   data: {6 \% z3 m' k6 o9 M/ I7 a; [7 U
  9.     message: '<h1>菜鸟教程</h1>'
    7 Z0 g! m/ K, @
  10.   }; L- @7 V( r7 X; x5 f6 |
  11. })
    / e0 K1 O2 ~; ]/ {; d6 w
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">/ ~2 u* k* V& h& {; Z! ]8 m0 [
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">1 ]  f. s$ d! b* T' U/ B
  3.   <br><br>2 b' b/ C& i0 Y8 h2 z! n0 v  [
  4.   <div v-bind:class="{'class1': class1}">/ @6 u- t, D4 \- K, W/ W5 k
  5.     directiva v-bind:class( [* D( _1 r$ U9 e! f/ K
  6.   </div>0 [1 v3 e# W& W' a
  7. </div>
    ! l0 u5 |% s# B- o2 X
  8.     9 e0 S. r7 Z1 W+ f' t5 h8 t
  9. <script>
    : n+ u0 ]. c1 x# A* W+ }
  10. new Vue({; i" H' o# ]" {% j
  11.     el: '#app',
    * a' u' y4 l$ p' w
  12.   data:{
    - ^9 E$ U+ S2 g" Q. a( q: U
  13.       class1: false( D, Y; r* E5 x$ |$ s( y! b- b
  14.   }* I) m) _: y/ U$ a9 L/ [
  15. });$ ?7 u+ @0 `' n+ g  Q
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    % F) m* @4 |& Y# H+ G6 _
  2.     {{5+5}}<br>4 q2 w& Y# J, \5 A+ G- N# @. x( I. C0 G
  3.     {{ ok ? 'YES' : 'NO' }}<br>. A+ S- b$ l  I1 b1 Q
  4.     {{ message.split('').reverse().join('') }}/ D) C! {5 b+ F/ l& n- }
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>, T5 i6 [+ |5 z0 P. F
  6. </div>
    / f$ Y* h$ _5 e3 [0 w. u- g
  7.     2 g1 e' T6 G. i0 o
  8. <script>
    ! s+ H# o& C, Y, ?# C* V! ]
  9. new Vue({
    ! x4 L7 H6 x" d* Y# L! c* y& q
  10.   el: '#app',! u3 V& \1 u7 L- w/ ?
  11.   data: {2 Z* S- g. I! F7 G) R2 r
  12.     ok: true,
    ! W- C2 v& L: P) _3 N9 T7 P6 t. w
  13.     message: 'RUNOOB',9 t3 o8 g) d# J/ ?( j8 h$ F. D
  14.     id : 1- [5 v* l* |9 G0 D. _' K* z
  15.   }% h; i6 v- q% P) u: [% @( H
  16. })( x" |* Z: B& e3 f) y5 J; C; C/ C
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">! p% @' h; L5 h" o5 u" Z
  2.     <p v-if="seen">现在你看到我了</p>
    6 @3 W& x# A1 Q
  3. </div>( L, t6 R- L4 m; v% [9 E$ l
  4.    
    , w" L0 x# X  Q/ O. O( _1 e
  5. <script>' q# L1 U5 s" F. O( s9 M* u
  6. new Vue({
    4 s; N# H9 S3 R
  7.   el: '#app',$ T# {; F5 a) `- V2 f) r
  8.   data: {+ L+ [" J. _* j6 m
  9.     seen: true
    ; {/ ?1 D& G( ], M' x
  10.   }
    / a* E4 p0 b( c6 M0 C% L/ R2 X
  11. })
    ! W7 o( @$ g7 ~0 ~9 P
  12. </script>
复制代码
6 o- v, u" S0 C' n- D4 E6 c
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">1 `: L, L7 }* c; Y2 r+ l9 J
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    1 Q" g  l+ U- f9 F6 k% p
  3. </div>
    2 _! ]. P1 \. V& R4 d
  4.     . `0 ~) S) _! ^
  5. <script>4 v( n5 m! e! h9 c
  6. new Vue({$ N7 H2 j/ A1 U9 }+ N
  7.   el: '#app',- {* L& j7 u# }: q, j( k
  8.   data: {. [( }0 T9 ]! x# {5 e* Y6 _4 G
  9.     url: 'http://www.runoob.com'
    2 ]" e9 ~- a# T. ]; ^/ {  c* I
  10.   }
    ' R% M% P; Y, Y
  11. })* |, f( F& n/ x; X; h! u
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

; q6 i8 Y& v* u" ]8 ]% H4 q) j8 c
  1. <div id="app">
    4 D6 o. c+ F( |4 G% g- W
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>4 k, R( ^6 @! `4 ^+ {( r

  3. 7 y( S1 D8 Q! K
  4. </div>$ t) u6 C* N9 N2 T& q  u3 w
  5. 8 z$ }+ q& {/ m7 h8 Y( n4 N9 l8 D
  6. <div id="app2">: I9 ^* Y% v& A* k% p3 A1 d
  7.    <p v-for="val in arr"># {9 o7 m. r/ G4 k5 C' s+ p
  8.     {{val.a}}
    / p2 f. ~, v6 G' K) X; c4 B( q
  9.    </p>9 \0 z/ O* {) s* {8 ?# ?: h8 W8 [
  10.    <a  v-on:click="tap">点我</a>
    ! `. I8 @/ ?# Z/ R0 l2 y5 h
  11. </div>
    2 `0 n$ b7 v  I# |4 d) [2 U

  12. ) W! B& W# d! J' r% w: H5 F
  13. ; ]" m! J: [& P  A
  14. <script>: p6 M% @( ]: p
  15. new Vue({
    ( k! _8 C; h8 u% ]/ V0 `
  16.   el: '#app',+ T. a+ }9 k, d+ r7 {7 a
  17.   data: {' J4 p! O/ j" \' J# F4 v& C0 o
  18.     url: 'http://www.cncml.com'
    / ~3 l0 L; K  H- p9 d
  19.   }) `/ W$ G5 F1 |& A, P) b; P
  20. })
    , P/ `% a* x, J7 R, s' q
  21. new Vue({, u# `8 O- i" U+ z  x2 u& B# |
  22.   el: '#app2',
    ' S0 E. D4 G( u7 L0 T3 K0 Q
  23.   data: {  B0 B* e( E, t( L/ b# n5 N
  24.     arr:[
    + S% \6 S" ]9 u
  25.      {a:'bb'},4 g/ a) ~  c. o9 M5 t0 c, S$ P$ o
  26.      {a:'cc'}( x) Z6 f3 U* L6 o, `, J; r
  27.     ]
    ' C: w' T% ^3 c8 O: t) K& b, |" h9 V
  28.   },
    / b- q3 k3 T; e" d2 G# j! w- [8 a
  29.    methods:{
    % D% \8 b- [& E4 E, x5 b2 t6 T  V
  30.     tap : function(){. N# b0 z$ ]& v" i
  31.      this.arr.unshift({a:'new'})& I1 C. t) V' E( _% [" i$ f
  32.     }. y6 I, w. d* M9 j1 _
  33.    }
    - f" k; K  x0 X7 o* M7 ?* C: W: j
  34. })
      W( Y- z2 L) T5 K; {& ]
  35. </script>
复制代码

7 ]+ I7 ~0 ~: h( z3 {9 E
% n9 L! o% A' X7 \) g, Y
在这里参数是监听的事件名。
6 C: A! S% Q2 a9 Z- k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:22 , Processed in 0.061465 second(s), 23 queries .

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