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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10771|回复: 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">9 m. w# [$ e8 H3 j+ u1 ~$ i
  2.   <p>{{ message }}</p>
    " P) `! q, x6 @* m
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">. k' |6 C1 I1 z  W
  2.     <div v-html="message"></div>
    ' v: x. y  _9 m9 g% J) g* J
  3. </div>
    3 Y# E% z3 B" g- g1 j7 H
  4.     ! z5 c1 ?! f. k3 Q( c" @4 e
  5. <script>
    8 g2 v1 s% b* h6 G4 T
  6. new Vue({
    & }/ s* ~* v( ?+ \  g$ a1 i, \
  7.   el: '#app',; {6 J# b1 i: m, _# J
  8.   data: {
    $ Q+ \! N2 G. }
  9.     message: '<h1>菜鸟教程</h1>'2 a5 N7 E9 G6 B7 J
  10.   }
    ' p( C' L6 ]  t9 D
  11. }), L$ J% I' X( S) J' l! v
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">& I9 B# Y( J* Y7 S
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ( @0 D; H& w- P) b
  3.   <br><br>6 o8 N' P6 y- u: |- x
  4.   <div v-bind:class="{'class1': class1}">
    " D2 W/ L4 p; e, f, A8 j
  5.     directiva v-bind:class
    ( F- W' B/ E, h: J* l
  6.   </div>
    ; b- u: i+ e, r6 v
  7. </div>
    - m5 V9 U% m; N' G
  8.    
    7 p* D6 }) _6 L( t% k5 k
  9. <script>
    + q, R5 q+ @/ F+ D
  10. new Vue({' K  S7 Z8 \* W
  11.     el: '#app',
    $ T7 _% X; }, S# z. q6 p
  12.   data:{( i- m3 l  K7 ^/ S8 k+ R. ~" d) S
  13.       class1: false1 o: U1 z4 y+ [3 G  I* B2 q; X# m6 S9 S
  14.   }; k0 u; U4 ^, p5 C" v0 c
  15. });% f  Z( C% G- M
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    5 G) {* N. j4 o5 `
  2.     {{5+5}}<br>
    0 f% o! k- Y, Q, @- W
  3.     {{ ok ? 'YES' : 'NO' }}<br>( r/ q3 ?2 k2 v+ Y
  4.     {{ message.split('').reverse().join('') }}
    6 z8 j4 u3 c# Q
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>" Y! |; E% i6 L1 b. L+ l
  6. </div>9 h: {* a  A; L7 b
  7.    
    8 K) z7 H* W3 u- u7 w" S+ o
  8. <script>  b6 o) O% m2 _/ d
  9. new Vue({! T0 W! @* E' v
  10.   el: '#app',
    ' L4 P7 e( C* G; S5 K
  11.   data: {
    % P- P2 S0 T/ {2 ?& N9 v
  12.     ok: true,! a% h$ `& k4 H0 E8 ~) R. \
  13.     message: 'RUNOOB'," M5 G% G1 D- |2 m7 ?  Q
  14.     id : 1
    # |$ L8 ^  C1 \. I% D0 Z4 G2 g
  15.   }
    ' g3 L& K0 Z  i2 v2 R( X
  16. })
      {8 z. y5 j1 A+ @; K' b
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    , C' Z- W% T& A* b
  2.     <p v-if="seen">现在你看到我了</p>
    " L0 t; F9 Y* r4 u1 Q+ o
  3. </div>
    ! `6 x, A' S" |% Z- I- _
  4.    
    ( S4 V/ }9 P" n& B1 h+ c
  5. <script>
    ( _: u) o' [/ c3 k" f
  6. new Vue({
    2 I5 G) S% [8 q7 L) P3 q
  7.   el: '#app',
    ; x4 n& r/ V. a6 J3 l% ^5 Q; Q* w9 j
  8.   data: {
    5 l3 K& ^2 ]  }4 S7 d& f  O
  9.     seen: true
    ' n# _2 B0 v! t& _/ D3 U
  10.   }
    . o7 ], R) U* X2 I6 U
  11. })
    3 \7 Q1 T# l" ]; }- q
  12. </script>
复制代码

% N2 g: T) v7 M, p
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">$ @1 n, ^1 O$ v' g/ t1 n8 ]
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>& L# |$ h  T1 X) K% `, x; H
  3. </div>7 R/ M. J0 m9 h+ V- U. ]+ N
  4.     * d6 }; e2 F  @
  5. <script>7 S) v9 g: _7 V' M5 m
  6. new Vue({
    / E/ V/ a% S* T- y& _
  7.   el: '#app',/ W2 e) Z1 {6 Y, `: U$ K
  8.   data: {
    / H$ q' c! o' S" H" ^4 K
  9.     url: 'http://www.runoob.com'+ D/ ?$ P  n+ x* {( R3 c
  10.   }
    " p* d+ y* K9 ?& O6 `; K
  11. })
    ! B5 I* z  q+ Q8 k8 [! E7 z
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

* j8 |3 S/ U# Q# @' b0 }( \
  1. <div id="app">! S2 W5 z# _; z2 Y9 _
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>2 C! j. @: R) h; `2 G
  3. & V& f' U: V- L$ B3 i
  4. </div>" r- }0 u# r  M9 Y( l* A
  5. - m& n6 @4 v) V1 {9 G
  6. <div id="app2">" d: R% z3 }8 ]. z1 p: K
  7.    <p v-for="val in arr">4 X) f$ n5 R: L5 e0 X' Q- o
  8.     {{val.a}}
    0 _+ h7 F( }. d
  9.    </p># L- l" k3 E+ r0 v) J) ?
  10.    <a  v-on:click="tap">点我</a>/ s& @2 v- |6 K( ^/ Q
  11. </div>; n! M0 k( P4 f# V) r

  12. ; O/ J& I2 F! f4 [& W! ]

  13. ) p2 Y! [1 S9 G6 r! G" w
  14. <script>
    1 S5 i* K3 l+ j8 ^
  15. new Vue({
    # Q$ s  x9 U; m5 d$ I
  16.   el: '#app',
    4 a, ~: d2 f1 t
  17.   data: {. r7 C/ K7 o' Z
  18.     url: 'http://www.cncml.com'
    8 }6 M$ Y  v5 @, |
  19.   }
    + P& ^/ o- `9 d  B
  20. })' l5 [4 L9 L  N+ g. S* x! d
  21. new Vue({
    / o8 S5 X; c  Z5 j: z7 g4 D; I
  22.   el: '#app2',
    & C9 _0 P& m! R7 w: x
  23.   data: {6 C1 U2 f  y2 ^! U* C2 T
  24.     arr:[
    $ @4 ^/ \# v' L5 [* @' n+ q& R
  25.      {a:'bb'},% |, t4 L3 g5 L
  26.      {a:'cc'}
    ' o' [: d6 ^. X
  27.     ]
    6 i! b4 l' T  S! g5 o0 K7 Q2 ~
  28.   },: {9 W  d4 \* ?8 k
  29.    methods:{
    0 Q- p- @1 N# }) A
  30.     tap : function(){6 R) S2 B; d% [9 J+ U
  31.      this.arr.unshift({a:'new'})
    1 D) r7 e, s/ G; a  c3 F; L
  32.     }$ a& p; z& H  ~& c! i
  33.    }
    " `# Q! g7 b+ y6 L8 r8 v* O
  34. })
    5 O$ j3 h7 n! X2 H0 n
  35. </script>
复制代码

/ G$ e7 W. _+ O  m1 D, L5 V7 c- E

8 ?+ x) H$ i0 f5 g# i( v+ @
在这里参数是监听的事件名。
$ P# ?/ Q" W1 Q, t! `. C8 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-18 16:15 , Processed in 0.113434 second(s), 22 queries .

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