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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15307|回复: 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">
    + {) F& y, e3 h' V8 z( Q5 a4 M
  2.   <p>{{ message }}</p>
    ' J. m% m6 O# i' K# N. @4 b
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">2 n: E) I" t/ i, S0 j& o
  2.     <div v-html="message"></div>! f0 O( K. l: @. R& c
  3. </div>
    5 Z" B: J& N# h. L1 B
  4.    
    9 q4 o: _# m6 I. T
  5. <script>0 b$ y! L0 k+ H0 }( V" C+ @
  6. new Vue({8 P8 o/ S7 X, q% Y; L* C
  7.   el: '#app',, _) m# Q& N- @7 g) N9 O
  8.   data: {
    1 E- q+ N3 t7 b1 F: c" K9 e
  9.     message: '<h1>菜鸟教程</h1>'
    # x+ L  O' G; d% c- v7 D; q
  10.   }
    & ?( n# L- b- C* l  D; Q3 i
  11. })
      D) h9 _  n1 z
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">5 w/ _3 h0 i" ?3 g9 m/ x0 R) Z
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">, }, O9 n( k1 S" r& K: h
  3.   <br><br>
    # m0 p3 d5 ^; c  K8 j3 U
  4.   <div v-bind:class="{'class1': class1}">
    / L" i& U9 K' j' d" k
  5.     directiva v-bind:class
    5 P" R$ j! Z) _! _% ~
  6.   </div>( A# _6 O3 l" d' ?8 ]3 j
  7. </div>
    / ~2 K% Y! {0 H/ H
  8.    
      a+ ~/ B% x& ?" ^6 f# I
  9. <script>
    0 I% \" e: m% m" J- V/ f
  10. new Vue({
    2 ?. ^: w' Y; w+ R2 b& n' {
  11.     el: '#app',1 l+ W1 T8 V. x0 P8 J2 w1 ^
  12.   data:{8 @( n" P  }7 V& }6 X% G
  13.       class1: false2 v; g( W; m% z2 p
  14.   }/ [$ N; r$ D1 k
  15. });
    . ]9 k0 e0 Y! S" Z
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    2 k) x5 A5 N% W9 s: ^: G
  2.     {{5+5}}<br>6 o2 i1 W, }! T0 g" g; x
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    6 V1 @& D9 i( k
  4.     {{ message.split('').reverse().join('') }}2 `' S) k0 X( R$ M
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    2 S8 {  O" T6 S, w# j
  6. </div>& Z7 Q$ K$ h: p
  7.     / a" b0 r9 m7 x, B8 W: L; \) a2 G
  8. <script>
    7 M1 V. O. t! ?. V) {
  9. new Vue({& t2 j* H; K* g# A! p  O0 b
  10.   el: '#app',
    9 I6 |8 j# i# [* l
  11.   data: {- }" N* T& M/ t* t% K
  12.     ok: true,
    " ?! I; [" I( e' m3 s: K
  13.     message: 'RUNOOB',
    8 l0 i& ~7 J) w  u( W8 u
  14.     id : 1
    ' j) d8 O) v6 r, j
  15.   }
    % |* U0 U; ~4 v- @
  16. })3 N) k7 }2 ?$ B5 @% ^: t) }
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">% |% M! ]# N9 k& f0 u
  2.     <p v-if="seen">现在你看到我了</p>
    ! Y) Z) X" ]+ K
  3. </div>! E: l5 r! {  C" T+ q
  4.    
    , Z. d( m" A8 o9 q1 D
  5. <script>9 E3 |. u0 B: o9 p
  6. new Vue({/ a2 e. f. Z# j
  7.   el: '#app',
    ( S% s, E' g& \$ n+ ^; x
  8.   data: {  A1 f0 b5 d. t# x- _- V: |- `
  9.     seen: true
    * p; E/ |) g. i: T, m# L4 ]& ?
  10.   }% w- v! X: G4 x/ y, c6 W. `
  11. })9 f/ v. N4 r) s3 l/ u
  12. </script>
复制代码
9 |/ g9 z  @5 E" ]0 G( D
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    7 y( Z# G* k# B% r' Z$ h4 G) M
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>' z0 M7 s8 k" T; n/ S
  3. </div>' S- E5 J  v* C6 z) r2 _5 q
  4.    
    2 x& T; t. q% G9 r8 k3 P
  5. <script># L- H- e. O3 C7 n
  6. new Vue({# O& ]/ \  O2 j4 I: O* |" j
  7.   el: '#app',
    / \: A. C+ B, r; T5 \# j# z) `  @
  8.   data: {$ {% t2 B. t) }* e
  9.     url: 'http://www.runoob.com'
    2 p2 ?$ ?6 f4 h( G  V0 p5 d
  10.   }! V3 u7 v; z$ R( Y
  11. })0 z1 c: B1 x( {& O7 W; P* t& n
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
* `; k& L& N# Y
  1. <div id="app">
    5 c0 }# B0 u) ]: G% j$ Q8 L
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>: \+ r# g" |- M0 w4 L& X5 L
  3. & b$ K5 V3 e7 `4 K
  4. </div>) p( k' ?% m5 `+ y) G; \
  5. % ^+ ?6 C* D4 x& F: b) f4 k9 n1 F
  6. <div id="app2">/ }  r" ^/ j! K% u. z1 ^4 z
  7.    <p v-for="val in arr">. V+ W. Z- e8 `4 ]' d3 O
  8.     {{val.a}}
    ! Z5 ]4 q3 S6 p4 A
  9.    </p>
    2 j( a# L$ F, D2 i, P' e& y* F
  10.    <a  v-on:click="tap">点我</a>
    * k! T& S8 D: \
  11. </div>
    1 L6 _/ S1 i* |! N4 g6 Q; [

  12. * m6 w; S, W- C. i% d# s4 z6 U
  13. , D( Y+ {5 _; f
  14. <script>
    , C+ N+ s. [/ J( M8 G. z
  15. new Vue({7 K1 X3 `: W$ e2 D
  16.   el: '#app',
    0 X& Y* t! f5 T. X- U
  17.   data: {
    / x5 H1 h, K" U
  18.     url: 'http://www.cncml.com'
    ' \7 |! y9 K+ F4 }+ F# {7 L+ x& b& J
  19.   }8 z/ \& e# M# q2 w1 w2 K
  20. })* N  U; u/ v; X/ G/ J) P: z
  21. new Vue({
    0 x+ ]. U3 f! q4 ~7 `; o. ]* J' V
  22.   el: '#app2',
    3 t9 ]3 H2 c5 r8 p
  23.   data: {
    ) X7 X0 [! d" @6 O0 x. J
  24.     arr:[
    1 j2 t8 \  K2 F
  25.      {a:'bb'},
    8 X: C) E% n6 _- r- a4 l* }  Y
  26.      {a:'cc'}. j3 }* N( v7 {9 h1 f
  27.     ]
    1 F1 ^+ U2 E" [5 k" u
  28.   },: R% a% J& ~9 o9 N! J8 n* F
  29.    methods:{
    & M( A# k" y" R. K$ m3 F9 m
  30.     tap : function(){7 X1 ]3 i/ C3 F, i* ^
  31.      this.arr.unshift({a:'new'})
    ' j, s* n9 r) Z( z7 e' N
  32.     }7 a1 }, P: q, ]. U! k
  33.    }
    9 C8 W( z% O6 |% F; h6 M- Y
  34. })
    7 t5 v6 C# N2 n9 q4 Y
  35. </script>
复制代码

' f# G! A, |4 y+ k! W" G& i
2 G- `* f6 ]( g+ q
在这里参数是监听的事件名。
3 `! d5 V+ r5 h, M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-4-30 19:05 , Processed in 0.060232 second(s), 22 queries .

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