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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15524|回复: 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">& `$ {  J7 ]( ?, ~, t0 U
  2.   <p>{{ message }}</p>
    9 E) Y. i" p  W6 Z
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">. V/ ^# z* V* L
  2.     <div v-html="message"></div>
    4 I; n* g( `/ w- {9 l" C
  3. </div>
    8 K8 \0 {( G8 L
  4.    
    6 b$ ?& O# U; y; A6 {7 A
  5. <script>
    4 b2 c0 h2 K& ~6 G
  6. new Vue({
    : l; E( a9 b! S" s* k, A% Q
  7.   el: '#app',
    . f" s' S! Y* |3 j) [
  8.   data: {& c9 L5 Z; d4 ]% Y
  9.     message: '<h1>菜鸟教程</h1>'
    1 Y, k& }: @8 S7 k
  10.   }
    % I) y5 |) T0 |+ {$ C
  11. })
    - o" f7 T6 f1 v: w8 p
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">4 v' \. K. _* \1 E* W8 u
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">; |, I: `7 j. ~2 P, v# w
  3.   <br><br>3 b4 _# V9 S9 d8 v  s( C
  4.   <div v-bind:class="{'class1': class1}">
    * d, @9 `5 Q- H% t, {  q7 h$ \2 ^
  5.     directiva v-bind:class
    8 U) F( @4 l5 `" }4 `5 y
  6.   </div>
    - W  h$ m  a7 G) V- Y2 E
  7. </div>0 W4 {% E; m, W+ \# @" `5 ^
  8.    
    , A: X( b8 G8 Y+ k5 h9 w& Z
  9. <script>& d9 X9 i3 z  a+ {8 x% j; r8 ^
  10. new Vue({
    , T# D* e, C2 y: \' _) I
  11.     el: '#app',
    % a5 H6 e8 a+ l4 ?& d( _1 t, D/ J# `2 S& ]
  12.   data:{
    / J. Q5 C5 g% j/ j! J/ E. H7 g0 V
  13.       class1: false
    ( N# h; c. l2 e! W' F" l9 x6 z4 [
  14.   }
    5 |9 ]9 P) \; W- ~- h- J
  15. });
    8 s: d$ E# q4 S" R- v6 A
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
      T$ l  a9 M' h0 Y! o- i. x$ f
  2.     {{5+5}}<br>
      e* C: d  ]9 n8 g1 ^% ?9 a/ v
  3.     {{ ok ? 'YES' : 'NO' }}<br>, R- g- V  u: C) S
  4.     {{ message.split('').reverse().join('') }}
    2 x* d$ u* I9 z, g
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    6 R; L! p* U9 _6 m$ |6 v" }
  6. </div>
    * V- m1 k+ B3 E! d
  7.    
    + k8 I; ]" f% Z% {+ |. N( G
  8. <script>" H" s* m0 l3 N# {& v
  9. new Vue({% Z# k$ l  m" H' E: o
  10.   el: '#app',2 g/ A8 |/ X0 e8 F3 \
  11.   data: {9 x# n5 r* r% \' Y
  12.     ok: true,9 e* C. A, g8 S1 ~1 ?
  13.     message: 'RUNOOB',- _0 ?+ j0 ~6 G% ]6 {7 c- ~
  14.     id : 1# ~; [, w& E0 Q) u% X  a
  15.   }. J: e! J, `- A, u
  16. })
    % M; j, P) ~( x" o, K( x
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    / j9 D: h+ ?1 ]7 e+ Z7 J8 q
  2.     <p v-if="seen">现在你看到我了</p>
    + y2 Q& k; M3 S) X: A
  3. </div>
    % b$ o; R) L+ ?2 C2 R' ~& H# q% f. U
  4.    
    ) n! r. ~; @4 b) p% f
  5. <script>( Y( c' h3 ?) C) [: W; X% J
  6. new Vue({
    / g% W/ L* |0 r- F/ N8 i% S
  7.   el: '#app',
    4 @  @: w! y7 G! l% }
  8.   data: {
      }2 o: p! W1 j+ \# J
  9.     seen: true6 _8 X' ~& m+ R. J( j3 H
  10.   }
    % q0 D$ a0 u2 R3 P
  11. })
    # _+ @$ @1 p6 c
  12. </script>
复制代码

% L( [) n5 _. B5 m2 ^3 z
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">6 e( P7 p3 ]$ l7 t, x
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    9 Q% T" t" S% A, k) y: y4 P" k
  3. </div>, J" w) Q% V* p+ E6 ~. c
  4.    
    3 Y3 {( l) A! v' I! W, J# x
  5. <script>
    1 |0 K2 ~: v2 q/ a. b7 B
  6. new Vue({# o9 @) \5 @- H- u# I
  7.   el: '#app',/ y; m  k) G, O- G0 L; s( I' [
  8.   data: {9 O6 w! G8 R' ~/ D
  9.     url: 'http://www.runoob.com'
    - O" w' o, k0 K7 t) T2 c$ r& j$ E7 u
  10.   }
    8 u! u! U* i0 V' p& d
  11. })
    : G% T* Y+ _: S- F6 V' J9 l
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

3 Z0 Q# q( f; a0 i
  1. <div id="app">
      }: n5 C1 }) X) O9 A' D3 u8 I
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>; x  U& Z0 Z& E( _3 j, C5 Q
  3. 6 v- }! A- H( A, C( ?/ @( R7 M; ?
  4. </div>
    0 W- T' [+ w: w  s1 y3 ?2 s
  5. 3 M# I. {& I2 ~5 d. n
  6. <div id="app2">- j6 b$ S5 R: f
  7.    <p v-for="val in arr">; `' w; i9 C' y) j  x
  8.     {{val.a}}* @2 u$ Q# \, `  Y$ ~8 R7 I& Y8 M
  9.    </p>
    ' j7 K; C+ n! {5 K, N/ s
  10.    <a  v-on:click="tap">点我</a>3 L; ]& T% W' \0 ^6 y8 @
  11. </div>
    + n  z* t* ?8 }

  12. 5 G. g* u) l! m- L% }9 y1 y! S
  13. 7 @! y' B- m) s; ~6 A8 U5 ?/ k2 K4 m
  14. <script>
    / M. V: V0 G; U& \
  15. new Vue({( W# G% g* _+ }" |1 \
  16.   el: '#app',
    3 E& E" K+ b( \: l/ n. E; E9 k
  17.   data: {, B+ P2 M: D( x- ]
  18.     url: 'http://www.cncml.com'
    ) o: T8 M0 V2 a/ y) D. t
  19.   }
    ! l8 _% M0 Z; d2 \6 i/ s. K
  20. })1 q4 l  N4 b, Y4 r% {. C1 Z( ^
  21. new Vue({  V  ?: o$ Q$ r- R6 s# U+ `  O
  22.   el: '#app2',
    7 e& |9 a; u6 r$ Z
  23.   data: {. U: H8 u/ |  Z, k3 k
  24.     arr:[
    - m" [! g$ g9 U$ f
  25.      {a:'bb'},
    / `5 ?7 C) z. @5 e
  26.      {a:'cc'}
      p2 _/ `2 b, \! J# Y1 ^# i
  27.     ]0 I/ G( b+ m& C% U
  28.   },
    % v. x# a4 a, x* x
  29.    methods:{1 k* }( F6 k# ~0 V2 T" J# I
  30.     tap : function(){
    2 {* q7 B& v- t9 W: C
  31.      this.arr.unshift({a:'new'})8 K/ [  h& F- f9 Y+ b% D6 W
  32.     }
    . f& ~7 y2 T! a
  33.    }# f9 [: }: c3 ~3 |7 m) c5 G" }% i
  34. })
    6 `) f: b' h( V1 ?
  35. </script>
复制代码
% n# _; j$ U# S" v

! u" ?4 l1 R, f0 \
在这里参数是监听的事件名。

9 ?  A/ {: Y9 ~2 O; ^5 k# y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:44 , Processed in 0.063774 second(s), 23 queries .

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