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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15523|回复: 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">
    4 o  X$ \  Q! X& t
  2.   <p>{{ message }}</p>- y; T1 Q' p( J6 W$ S' v, G
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    7 k: W7 B& L) V. p. [
  2.     <div v-html="message"></div>
    9 _: ?! O% `' {
  3. </div>
    ) t/ f+ q& l0 d% D+ J
  4.    
    ! N3 Z# A9 x  r8 M9 A
  5. <script>
    . j6 i$ r7 A- r+ a
  6. new Vue({
    + r6 t0 y" D6 Z& ?
  7.   el: '#app',
    * I' ?8 G! t. Y6 A) B4 ^0 Y8 }
  8.   data: {
    5 Z2 J6 \9 w# ^; e9 ~2 O' P
  9.     message: '<h1>菜鸟教程</h1>'
    % ~; Z3 S4 J& h& F/ o# n) b" w
  10.   }
    1 ?, }5 f0 u$ Y# c/ S, U
  11. })- ?: [' _, b2 `! f
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    - z0 |5 _* x3 V* ]: I  k9 m
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">6 K& r- [2 `$ p' J$ v
  3.   <br><br>
    . ~% r* M; r6 ~6 E7 H
  4.   <div v-bind:class="{'class1': class1}">  [1 G# ]' u/ T  S5 a( K; f
  5.     directiva v-bind:class
    8 W4 Q0 w. f# R1 s1 s9 x* N
  6.   </div>
    + w0 S. ]) ]3 a$ ~( f
  7. </div>
    + t+ \- M6 s; a3 p! }, {* G( ?2 ~
  8.     : f: o2 Q5 R, i6 I8 d
  9. <script>
      u9 u* N- g6 m* l
  10. new Vue({
    ' E8 m0 `! X6 l! t
  11.     el: '#app',
    5 C' Y- Y- _5 t7 u% K+ w1 W8 a: L
  12.   data:{6 Y% Q1 E& r# j8 j) N  o0 o. j$ R
  13.       class1: false" P' _) w% ?2 j
  14.   }3 V2 s3 U  v6 u# w
  15. });
    . X- p& Y: ?8 e1 q0 D3 w1 v7 D" w7 ?
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">' I5 W8 Q/ v, C& p
  2.     {{5+5}}<br>$ E6 y8 ]" x3 l
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    ; ]3 ~( A8 S! l$ h% i9 m
  4.     {{ message.split('').reverse().join('') }}
    / ^& o  i) u2 X+ J3 G
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>8 P+ i0 |6 h, G
  6. </div>
    ( [& P" J+ X5 c: i0 F% W
  7.    
    ! _, Z' ~( n, P  Z" L' @
  8. <script>, ~+ \8 {+ Q; H
  9. new Vue({
    ; ^$ \4 Y% j% R, j
  10.   el: '#app',
    & N8 I. z& s3 E; ?! V
  11.   data: {
    / }) P0 c4 i) W$ q$ l: Q  l9 z
  12.     ok: true,' ]$ u- {9 T5 k
  13.     message: 'RUNOOB',3 r- g2 a. N- }0 [
  14.     id : 1
    2 j( o9 r* r( K$ b, S9 {
  15.   }6 p( L6 V5 W) V
  16. })0 S2 J8 u5 {& R' y5 @
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    5 o" b, z: k5 n4 w* |! ?. Q" L
  2.     <p v-if="seen">现在你看到我了</p>* W# z: s3 A; }# l! w* d  @- s( L
  3. </div>
    1 Y: a( s, [; t5 }, b9 Z9 D- h
  4.     , d; k! m: F$ s+ ~5 Q/ ]% S% r
  5. <script>
    ! }; ~/ Q3 }1 o1 T  X+ V
  6. new Vue({
    ; g% _) @: j$ `5 H- r' b! X  U6 k
  7.   el: '#app',
    9 W4 K+ i8 X5 h( A3 j
  8.   data: {
    * }$ h: ?& m! S9 F% U
  9.     seen: true& L, L. z- A/ G4 d) E, L& |8 e
  10.   }+ H7 j3 A( r1 w6 i
  11. })* i) V1 n& c% |4 x5 S1 Q* X, T. g
  12. </script>
复制代码
, R* h7 I- M+ d" h8 l* X, [, \# n
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">! O3 Y+ m7 C8 c- u7 J" W. O3 g2 b. a
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>8 j$ _& A: S" ~& A( L  p* n( D
  3. </div>
    + l- K" q, G0 w4 ?! r
  4.    
    & Y5 P( @/ Q7 b  T  L
  5. <script>
    6 `' P: M6 u, g% z7 x5 b) T/ M
  6. new Vue({  H8 j) V1 M9 {! w" Q( H4 g6 z& Y4 R
  7.   el: '#app',8 ^! x1 Y3 q8 F4 X: x( _$ f+ {* i
  8.   data: {
    * q8 ?) i4 d$ w* X3 H
  9.     url: 'http://www.runoob.com'& T# n- g/ b3 \5 S$ i' l
  10.   }
    6 o( K) V. a( f. W. b  o$ J
  11. })1 S  \  a5 Z- [8 M
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

8 n: p; s$ \/ n8 m! I' z
  1. <div id="app">
    ; s  l1 U: A4 L" j$ I
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    7 d0 P0 T- [3 ~. ^2 p" T2 F/ |0 b

  3. - L9 J! {9 p/ f. A1 C8 p( d
  4. </div>
    2 W* P# ^6 Y/ v6 G+ F" e
  5. * ?( n1 j9 l: x# r4 i" i* S# ?
  6. <div id="app2">/ u/ h8 M% T" h+ r; ^6 x# u
  7.    <p v-for="val in arr">1 P$ J1 a' h4 s: l: B% L6 Q/ V
  8.     {{val.a}}
    6 _/ Y  L" e; J2 d
  9.    </p>5 {) }$ v) ?$ f( y2 j
  10.    <a  v-on:click="tap">点我</a>! z2 q; |( W" S% ^/ C' k2 }* X
  11. </div>7 Z* P( }' O1 \5 m4 b5 ^! l; H

  12. 6 [+ k- i$ p* R' _& \1 w* ]$ u
  13. / ~$ \6 M% X  R( {6 M) S
  14. <script># i8 k+ t- z, }# j, Z
  15. new Vue({# r; z) ]7 P; h+ Y6 d+ Z
  16.   el: '#app',
    . l& c2 Z1 R* u
  17.   data: {5 H3 V0 ~; u$ w9 p: v% Z1 j
  18.     url: 'http://www.cncml.com'5 L" v* t, m7 h: g
  19.   }
    ; f+ g- M8 I. N( @
  20. })
    4 a! a: W* O5 F
  21. new Vue({
    / n  V6 R6 W7 Y" I# h1 c. s
  22.   el: '#app2',* P# _- {9 w& C2 F6 ~8 H5 E
  23.   data: {& u4 D% H8 M, f4 w+ x+ w9 X
  24.     arr:[
    + S- x7 A1 t+ B
  25.      {a:'bb'},; D; R5 k& e6 D& h
  26.      {a:'cc'}; D! J+ c) F7 v$ A
  27.     ]5 B' H+ i; N, Y$ b- m' Y2 L
  28.   },- K& q6 I3 B7 ?, }$ _1 n
  29.    methods:{7 r: D- [: h8 R3 a3 g7 Q% V1 s1 j" ~; d) L
  30.     tap : function(){) B$ s/ ^1 y. Q$ |1 l( R5 ^7 O/ N
  31.      this.arr.unshift({a:'new'})1 F1 l9 |$ \9 ^2 s5 g
  32.     }
    - y: b. U$ ?2 j2 j6 b) L7 j+ T4 E* g
  33.    }) z% k; ]$ i3 L: G
  34. })5 r8 c/ x9 [) R4 f; d( Q
  35. </script>
复制代码

) h' y0 [6 u; i6 H$ m
3 f' F3 `+ e' P8 x4 Z3 L+ ^
在这里参数是监听的事件名。

3 r1 E( {& ^7 h1 G- X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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