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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14890|回复: 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">
    ' r; Y5 d- \$ C  t# Z' c) _
  2.   <p>{{ message }}</p>: {1 I9 L4 w0 B# o
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app"># X- T( s/ \. `0 l. w7 w3 p
  2.     <div v-html="message"></div>
    $ e7 ?/ P/ s6 @3 K$ p% |
  3. </div>
    $ j( m9 ^0 ]8 }  M
  4.    
    9 x# y1 Y1 C8 ~3 d! l; M  I) p0 _0 Y
  5. <script>
    7 p6 y3 I, z1 T6 t
  6. new Vue({
    4 Y# s8 k: X- b( R, u$ M9 a
  7.   el: '#app',% `  R2 ~7 ^0 e. }) W
  8.   data: {
    0 G) R$ D0 I# @# _2 ~8 Y
  9.     message: '<h1>菜鸟教程</h1>'
    2 ?7 t1 m+ f9 G! L: k# `
  10.   }& U* s# ~( b' A6 e4 }' J
  11. })
    ' p5 ~1 m  V% Y
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">9 i  `; W: [2 a$ g. j1 |% r
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    + ]- i$ G* d. I
  3.   <br><br>
    0 k# a* E/ [' @/ y  H% @
  4.   <div v-bind:class="{'class1': class1}">! S+ z* Q$ u7 O
  5.     directiva v-bind:class
    ' _6 n7 L5 b% d( |! b
  6.   </div>
    1 |0 H; I; ~  a3 ]& R! ]
  7. </div>
    : X4 p3 ]2 ~7 P. S* b3 B
  8.       u& I0 i2 P+ E7 C3 j1 i, m
  9. <script>
    6 a$ s9 Q) [) x
  10. new Vue({
    ( Z! U6 m' p; E" E1 B
  11.     el: '#app',
    5 u: S& Z5 L. |# L7 m
  12.   data:{  y  U% @- \# C+ d
  13.       class1: false
    2 P" M( d3 ^% y: X  X
  14.   }
    0 ?9 B+ z8 O  {) r& Q0 y
  15. });$ A, P7 E* A; G
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    ) M6 _2 n$ ~7 U8 f
  2.     {{5+5}}<br>8 P7 K* Q9 d+ {% U7 r% q. c% w
  3.     {{ ok ? 'YES' : 'NO' }}<br>* |. T1 c# L! j* w( c5 m) `
  4.     {{ message.split('').reverse().join('') }}' |5 @2 m' U. N2 |3 v
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>2 M) e1 U7 \) Y
  6. </div>
    8 p( }, p7 l: Y/ n1 [) f
  7.    
      W' N! v! Q% p9 Q
  8. <script>
    0 C3 p4 A6 B+ g5 e
  9. new Vue({0 S; L) J3 p( q  @4 y3 w+ t$ y
  10.   el: '#app',
    , K: Q0 U/ Z, I' _' E
  11.   data: {% i9 |9 `& E  O0 k* ~, i
  12.     ok: true,
    % t: t* h% l+ E
  13.     message: 'RUNOOB',$ _: A* k# I; ^' v) Y
  14.     id : 1* r# S, Q) f! s( s) U' L
  15.   }# W! n2 G8 o$ A: r3 ?7 S7 e
  16. })
    - H! M, |7 j0 k
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">; w: o) v1 ~* s7 k6 p9 E8 W
  2.     <p v-if="seen">现在你看到我了</p>. n( _9 `( f4 M8 O$ c7 n
  3. </div>
    ) e$ X; p1 H( P  J2 @. l. l1 T. d
  4.    
    $ t4 ^& \& E& g5 a/ p: {0 @
  5. <script>
    3 O% O: ^; o8 N
  6. new Vue({* E" E; v3 e+ P, o
  7.   el: '#app',( m% b0 y" E+ I7 B8 \
  8.   data: {+ E, P+ R  m# o
  9.     seen: true  W& t4 q4 M" R: p, x
  10.   }
    0 F3 B$ Z# x! s
  11. })
    0 q# @, I' k. p- u
  12. </script>
复制代码

' x& E, X& L+ Q) ?, M& c3 p0 e
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    7 B' I, Q) U+ N! R1 X) U2 r
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    2 M  d1 Y9 D! K3 a
  3. </div>+ a# L( {) O* q: h2 F( v
  4.    
      k0 J" o# R: D. g; y: A, r' H2 W
  5. <script>: b2 z0 s) O0 ]4 {  R
  6. new Vue({
    ! ^) s% A. I* U, p, O" i* U% Q
  7.   el: '#app',
    ) ^! i: c* `: x/ z6 `
  8.   data: {
    1 N# X0 D$ Z, [3 D! y1 N
  9.     url: 'http://www.runoob.com'
    ! i' ?( Y# w/ ~
  10.   }
    / i& k3 F0 g9 q- z+ T& T
  11. })) U3 S9 U# A0 q$ A, K7 }, W3 k
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
8 b2 b  ~8 `6 v
  1. <div id="app">
    1 I1 D/ ^9 m& E; \
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    * |) C  t* q" d; D$ J& s
  3. 9 |  X5 |  `) d, N7 P2 c
  4. </div>
    0 l) v' S6 C' w8 Q& Z  C

  5. 6 @: ?  d3 X; H: z8 j. i# m& r# e
  6. <div id="app2">8 f, [8 ?: b: ~$ o( o7 D% A9 s+ [
  7.    <p v-for="val in arr">
    8 [$ a( f) [2 Z
  8.     {{val.a}}$ O- z5 t) |, _+ Z% N3 y9 A
  9.    </p>6 Q  T. m: X. m2 ]3 d
  10.    <a  v-on:click="tap">点我</a>1 S0 }& _" s" e+ x
  11. </div>" K" {$ ?$ \. a" j  n( M. ?8 w" ?* B

  12. ) y6 O& v0 I" l7 w3 b
  13. % T& M2 O+ e. D; i* x
  14. <script>
    ' H% s; h8 _, \
  15. new Vue({
    1 }- n& f9 G# G
  16.   el: '#app',. F5 b6 d4 P; L9 u
  17.   data: {
    3 z" a  v) n1 z: J- ^: Q8 ?
  18.     url: 'http://www.cncml.com'' `# b- _! `1 Q; z; k2 ^5 k! G' z
  19.   }/ W" ^1 ~0 A6 G( [
  20. })
    , I8 r& u1 _& z( W4 y, @& |6 R) h
  21. new Vue({
    - n9 G' g) M+ [" \
  22.   el: '#app2',
    2 ?5 {7 S6 z7 Y" D6 H
  23.   data: {
    4 ^" k8 f1 o8 K, z' t1 u
  24.     arr:[
    # W# t, y; P! ?0 u) k; }9 g; q- }
  25.      {a:'bb'},# v. K2 v" W* L/ C  N+ v/ J( d
  26.      {a:'cc'}8 Y8 F+ z2 Z; ?$ M+ [5 ]
  27.     ]
    3 q2 J2 @6 o5 s6 C
  28.   },2 V& M  @+ e! H7 O6 }; G" G3 O* y- t
  29.    methods:{, G- h2 {1 J6 ~( Q" B- G
  30.     tap : function(){7 G, _" r* _4 a1 J" {' q
  31.      this.arr.unshift({a:'new'})
    8 R' M5 f  `; Q7 b' p% w7 x$ t. ?
  32.     }
    & o: j, m* H' t( X6 e
  33.    }
    # W8 T8 a* n6 K- u
  34. }); d5 n8 W& A( x. Z$ Z; _
  35. </script>
复制代码

0 s+ h; S7 O6 R
' G. X) {' x( }$ F9 }% C6 e
在这里参数是监听的事件名。

- T, s3 v' \+ K- K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 17:34 , Processed in 0.053819 second(s), 22 queries .

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