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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15975|回复: 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">
    6 |+ E! ^4 c# K/ a" C% p! {
  2.   <p>{{ message }}</p>& j' K7 B- a: ]9 v
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    , `; r8 D; |$ K* ~* D/ {$ p) u
  2.     <div v-html="message"></div>
    ( N* D" d8 n6 e, I* P) X
  3. </div>2 f5 N; ?/ [0 @+ y, ]! s
  4.     1 Z- _2 {7 H8 N4 B* K- f. w) h3 D. c
  5. <script>. B8 w: Z  ~' W! P' T' m
  6. new Vue({
    % k9 Z0 \' j$ M9 M' T8 u
  7.   el: '#app',2 I* t# A8 h, Q. K, z: @  F
  8.   data: {/ N1 ~, m" b9 d/ V+ V. d4 I
  9.     message: '<h1>菜鸟教程</h1>'
    / c+ V% f9 u! b6 Z  V2 b8 t
  10.   }
      r' H. _* V+ k. S
  11. })! o* x/ K% @9 g* l; m
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">/ h" S9 I$ c8 N1 Y4 N8 R: t0 {
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">1 R( {) k, m4 S( _# f
  3.   <br><br>
    % [4 V# A1 B4 W6 m! ~" j
  4.   <div v-bind:class="{'class1': class1}">5 V, M, [# U9 }: \
  5.     directiva v-bind:class9 y, m& n% g4 H( u
  6.   </div>
    4 I0 ?' |- e% p7 \
  7. </div>
    , ?0 z7 l" [7 R$ g1 O% a
  8.     + o9 i' e8 {! k( K( \0 b7 _4 t
  9. <script>; |: `; X; u* b. b2 d) D
  10. new Vue({
      h8 S  g: I7 r9 R+ Q; e# k
  11.     el: '#app',
    ' l" ~" v8 J, ?9 v: H, i$ _5 S
  12.   data:{
    ' `: N. _( ], b$ `3 }. G0 |: Q
  13.       class1: false
    * I, H5 Q4 L! a7 Z) w) T4 u
  14.   }
    & M2 f' r2 [  n( l/ I
  15. });1 m" s: S) R  W4 y" {1 A- p
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">7 q* H' V  a! i2 x( x
  2.     {{5+5}}<br>
    / N$ [* s- t  l9 b. O( o8 F
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    . r( H. ^( _; q/ j; R
  4.     {{ message.split('').reverse().join('') }}
      B* B/ v, v! |9 H0 V
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    $ y$ z0 [& V) a5 u4 E
  6. </div>. l: c" l# }9 \2 W
  7.    
    * {3 {  l7 ^- n( I
  8. <script>
    3 y6 P, M/ P, M3 Z5 g
  9. new Vue({
      H: r1 S: \. d5 ]* P7 |5 L" [  n
  10.   el: '#app',% o# @2 |4 i) O  K5 k
  11.   data: {
    - p: E" E1 a# U2 w7 e5 E  A
  12.     ok: true,) W$ R2 }' u9 Z% L8 V/ V
  13.     message: 'RUNOOB',
    ! @. l: O& I- s- M* O  m
  14.     id : 1
    3 {7 ]  h: l4 \
  15.   }2 R# N" g9 X& C% _: C( ?# N
  16. }); f/ `/ n2 m6 X' U$ s$ H
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    , J2 j' M3 d1 ^
  2.     <p v-if="seen">现在你看到我了</p>
    $ c0 x+ X0 M: k
  3. </div>6 W+ o/ k$ J, y5 o1 V3 s7 V. W
  4.     ! X# K6 t: V# J7 i0 l3 U
  5. <script>+ e" v2 W* U/ l
  6. new Vue({$ m4 l9 j4 V0 i& t% t: ^3 r$ p( }/ G
  7.   el: '#app',
    : d2 L7 ^- m5 s. H& H
  8.   data: {/ b2 d* Z* x9 f) ^
  9.     seen: true
    $ `. ~! D1 x2 M8 X& M
  10.   }8 e1 H  c* u: r9 T* S
  11. })
    2 g; n1 x4 E- g# z7 G
  12. </script>
复制代码
0 `/ b' s5 j3 I' v* x9 l- X
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    7 D; w' V/ ~5 N' p4 B! b  i. E
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>  W* R/ d! b9 X  H3 @
  3. </div>& C0 |- Q" ^6 ~0 F3 k
  4.     ! H& [! K3 |$ u
  5. <script>
    3 b7 g9 S- @+ T# N# U, l* D
  6. new Vue({
    . v/ e- N5 H& P& L, q
  7.   el: '#app',. \+ d9 n/ r$ r9 a5 \! I: G
  8.   data: {9 v- K' s8 |: h% i3 l7 @# T: i1 h
  9.     url: 'http://www.runoob.com'
    # h* A. [7 Y# W8 d& S
  10.   }
    ; t) Z" a3 T; l- x& Z/ x
  11. }). k. h& f' _2 ^7 p
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

3 A( @* s- }' m' g, T$ Q$ }
  1. <div id="app">
    3 a; v1 a9 N. ?9 p9 V3 l
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    $ }! q9 \6 T& b

  3. ) l  ]% [5 O4 f9 K8 x( D
  4. </div>1 w; a7 t  Q' R! ?% M# G. y* g
  5. " @# ?$ i! R* L& V# @' y; D9 L- \
  6. <div id="app2">
      |1 v  U' u5 y
  7.    <p v-for="val in arr">
    0 ?8 P" `! F# ^9 k  @: S* a4 H) B
  8.     {{val.a}}
    3 q2 ~5 u, I; f9 i. `
  9.    </p>% e# d+ K; w2 R' c- U3 R/ c
  10.    <a  v-on:click="tap">点我</a>
    : ], F' |# O/ [7 I9 `0 `& x
  11. </div>
    4 Q& \( x1 w# F- |$ ~& e

  12. 2 r; U. k1 ]0 V. b  i
  13. 4 |# y1 I* `; x$ T6 I* p  {
  14. <script>
    & r& g- E  u1 I0 ~) F5 H
  15. new Vue({
    7 K  N5 X3 ~9 J
  16.   el: '#app',
    $ w) P1 {0 ~9 f* \3 g1 |
  17.   data: {
    ) X9 t5 W: n& H$ U! |% {
  18.     url: 'http://www.cncml.com'3 p- j% K/ L. f( z  g2 h
  19.   }
    , C7 c4 F3 P5 G! S4 V+ V5 V+ ~
  20. })
    ' f/ R- r" J, g. G
  21. new Vue({
    " O8 c0 n5 v: ?  i% i' W2 k
  22.   el: '#app2',, E6 R3 n9 }9 u' P( F4 ?3 w, y
  23.   data: {
    ; k; A7 N  Y& K
  24.     arr:[4 ?" a8 S: x2 ]5 H5 }( F
  25.      {a:'bb'},. t5 B' H  h" s. j  Y
  26.      {a:'cc'}
    # e2 a  e4 k6 h' k# ]
  27.     ]" f' s! G6 e& _4 }+ }
  28.   },9 w9 A- ]' c! I9 n( Q9 n. F9 a
  29.    methods:{3 S! b1 i/ T1 Q; o
  30.     tap : function(){# R* l, k8 ~1 `0 i( X. k& b
  31.      this.arr.unshift({a:'new'}), v3 K- _! D' l; R: Y) ?* o
  32.     }
    " z5 M$ [# V, k. |7 |; ~, |. v8 c9 s
  33.    }& s1 j( H/ P7 O6 p- I
  34. })# ^" Y) D" L1 |' s- S# u$ V
  35. </script>
复制代码

* Y9 E2 ]: }6 o7 o/ b5 c0 s- R
5 g; ]/ H( m) x1 t# ?
在这里参数是监听的事件名。

9 [" y6 `/ }' M5 H" [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 14:06 , Processed in 0.057451 second(s), 22 queries .

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