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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14885|回复: 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">
    ) k6 `2 Z; Q8 o# b( u* g* O0 j
  2.   <p>{{ message }}</p>
    ; }$ ^/ X" f" V. L( p# {; @: c
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">- l4 l  K+ O: A$ K0 A2 b
  2.     <div v-html="message"></div>
    % u8 b" F$ w9 w5 s
  3. </div>
    , H5 C) H; K7 B- _0 z/ S3 A& g
  4.    
    ' w/ N- _# h1 F( a5 @5 S2 V
  5. <script>. l# s$ r; ?7 M, d
  6. new Vue({9 _) b/ s0 J# e8 L5 ~
  7.   el: '#app',
    . ^! A2 u) }7 Z0 x& j% r7 [
  8.   data: {
    & ?/ B& @, @- j; i6 x, {4 K
  9.     message: '<h1>菜鸟教程</h1>'
    ; m5 Z8 L. M; `. n/ I
  10.   }
    & @6 f! W  j/ }8 q. ~
  11. })
    % L0 G& o/ x- f/ T2 Q
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">' {% ]+ |+ r) e! Q5 c7 Z9 b
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">3 c( R% k. o2 z
  3.   <br><br>- h/ J; q/ N0 M1 _
  4.   <div v-bind:class="{'class1': class1}">' s8 {5 t( M; F# }0 G
  5.     directiva v-bind:class
    ( K& H0 H5 Y! S  X2 K( G1 n
  6.   </div>7 E. r2 c8 i/ j. I, U  l2 p) P
  7. </div>
    . f; ]1 B  S% K1 I+ ~2 J+ X
  8.     0 [6 }& e: t6 D
  9. <script>
    0 f! B- q) [( [; g5 Z
  10. new Vue({0 K" B3 x2 Q1 _  w) k; E. y8 `0 X* p
  11.     el: '#app',
    # u- X! H4 P* T: D
  12.   data:{
    # ~% x6 N3 a4 ^7 a! s$ }
  13.       class1: false
    8 U: o0 P7 L  }: `5 f
  14.   }
    ) a5 o' F5 M4 y8 s6 x6 @, s
  15. });
    6 O  u$ U# ^. t# T
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    ; v& `4 s, [( G  ]
  2.     {{5+5}}<br>0 I/ d! S3 Y1 q; c1 S$ [4 c9 w' z
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    7 j) m5 [0 n/ q  _+ O
  4.     {{ message.split('').reverse().join('') }}
    , t: l' h( \; `4 r& E
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>, I% X( Q9 b7 Y. k! X- \( z3 G
  6. </div>
    : v% b: j/ N# o& a
  7.     / }5 u' `! w2 G  y9 F
  8. <script>7 D2 E+ j& k: @
  9. new Vue({+ a; Z* o8 E) f, o
  10.   el: '#app',  \' K* V' |; Z" s
  11.   data: {% h3 D% d# d' h& `1 l- c
  12.     ok: true,0 u# q; b+ ?3 R3 b/ ?1 A
  13.     message: 'RUNOOB',
    , ?1 ^, @2 }, s
  14.     id : 1
    * O6 z+ c  F* A3 }  u) |
  15.   }
    & ?( ?8 {5 l7 v$ ?) T& B2 _
  16. })
    9 C2 h  k0 o* d9 d. e5 g
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">4 b  C& {' D+ J
  2.     <p v-if="seen">现在你看到我了</p>
    $ H6 E4 ^# ^8 L7 R
  3. </div>( U4 Y6 @/ ^% m" N- z) n
  4.    
    1 ~5 [* W$ G% z/ R+ ]0 @8 S
  5. <script>
    " S; {0 F7 t6 p' m* k: o3 J
  6. new Vue({
    / m' C# M- }( r1 T+ Q9 ]9 x4 h: Y
  7.   el: '#app',
    # K9 d) p4 i5 z: y6 x3 C
  8.   data: {" L8 c3 T2 ]- f- K6 l# E3 v
  9.     seen: true
    / }* Y; ^- a3 C  j
  10.   }
    ' \/ `0 d+ \( c1 ]
  11. })
    ! @# t1 ^+ Y0 @4 j" W9 a3 f
  12. </script>
复制代码

. O5 g  V$ G; F# l7 P6 U
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    9 i* W1 n* X. ~8 e7 K
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>* m, T: w; ?" s7 N
  3. </div># C1 M# z3 a5 A  f8 R: {# P/ A9 C
  4.     6 ^2 r$ Y; g5 B9 d
  5. <script>
      {) a7 N8 U4 H6 D3 p" v9 _5 O2 T
  6. new Vue({7 z* X, V5 `3 `9 V  T) G: r
  7.   el: '#app',
    ' X+ W$ _2 k7 i6 f9 Z2 {3 [
  8.   data: {# q) W: }8 `& i% {. W" @
  9.     url: 'http://www.runoob.com'
    4 A7 i4 N6 x" w0 X5 R* Y
  10.   }* F1 }9 n: X5 ~: ?+ K  F/ W
  11. })$ w  V9 c9 R& l$ [$ P' f
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
0 p2 Z0 g- U. P& b, o( V! K
  1. <div id="app">/ w7 [. o; p/ Z# T, g& Z$ E
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    . G' b# v+ A5 d

  3. : W  E' a% s2 t4 K$ S
  4. </div>
      T  N# c- ?/ c# D
  5. # r% Y# h! R- Q; ^* J- k. p
  6. <div id="app2">; K- s' ~5 P0 J8 A" g( Z6 l
  7.    <p v-for="val in arr">
    ( ?% k  d0 C5 N
  8.     {{val.a}}
    ' y$ }( K4 v1 h, Y) ?
  9.    </p>
    + [8 v  L6 [9 |) f( n
  10.    <a  v-on:click="tap">点我</a>
    % a9 C7 D  }  F' N+ L& T
  11. </div>
    $ i8 ]  K8 n( E
  12. ' \) N1 I3 K4 y- b
  13. * @/ g( G& s3 a# S5 x, v
  14. <script>
    . _* L  {) A7 ]7 `$ B' {# a
  15. new Vue({
    2 h" f4 A8 |1 p& b& J" n3 @
  16.   el: '#app',
    7 E  |% M$ P# d
  17.   data: {8 r2 R$ o2 f+ c4 E! n
  18.     url: 'http://www.cncml.com'
    ' t4 a1 h1 j0 p% I, S: v$ B; Q
  19.   }/ E$ t5 ^/ Y$ M, x8 L. ?% b
  20. })8 H' N) U8 x. j- G6 `" A7 I
  21. new Vue({+ U. x6 {; \$ A2 D9 m3 [1 G
  22.   el: '#app2',0 t3 M7 N# M5 S  [. ?4 P2 f
  23.   data: {
    2 ?# `, e8 m! }' @- ]9 P
  24.     arr:[( c# M9 }6 P$ g' D+ ^" t
  25.      {a:'bb'},% V8 V! M; w1 m$ b+ W: x
  26.      {a:'cc'}$ c& t0 ]3 d9 b4 M# L: V3 |' K
  27.     ]
    1 o/ M) B2 N: j0 L2 A
  28.   },7 I+ a$ C5 F$ _* \# g
  29.    methods:{3 M+ ^9 v% P& ^2 f$ a+ T& Z
  30.     tap : function(){' M3 ], P$ E' p
  31.      this.arr.unshift({a:'new'})0 i- S3 x8 I2 K# S- V( H/ v+ E
  32.     }
    # K! s- I. W5 B' G9 c
  33.    }
    6 ?5 V; G# w" R" Z( y
  34. })( V: e7 ?/ W% i+ l, S, q
  35. </script>
复制代码
( C5 P8 ~3 N1 v

" \  u* K# h4 e# ~: a6 }: ~
在这里参数是监听的事件名。

9 |% b" a9 Z: t3 A5 Q8 [3 W2 ^; [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 16:31 , Processed in 0.061476 second(s), 22 queries .

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