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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15968|回复: 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">
    , ~7 J! v% v* W, m
  2.   <p>{{ message }}</p>
    4 D  S" h. f2 ~/ D: K
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">5 f8 Q5 J2 c' u/ u- _' b* v
  2.     <div v-html="message"></div>+ L: z. ^5 H) N% V" Y
  3. </div>
    6 J$ D0 k* d+ N4 ]
  4.    
    ( a! \! ?/ \( e4 X! O% u
  5. <script>! o2 J9 g$ J1 d# y6 i+ M
  6. new Vue({! P8 g+ ]) x. \  ~
  7.   el: '#app',
    + ?3 [) e( b$ f; R* o1 T
  8.   data: {! l9 d; y& w+ O% f: r/ {' ]
  9.     message: '<h1>菜鸟教程</h1>'
    ( @$ ^0 q# }, Y+ i) k' r3 N# W  I
  10.   }
    0 f5 ?& C. b6 h- k; \0 G( [, N- T
  11. })
    & a. l7 U, |; f, p, K
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">2 N' {; l; ]% F: s( |: l' M
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    6 f1 C. n2 B) N) I/ k
  3.   <br><br>
    ( j5 E/ ]0 k, a9 r/ A  |
  4.   <div v-bind:class="{'class1': class1}">
    - B1 J" z5 `2 f7 ?( ?
  5.     directiva v-bind:class
    3 |! c% b# Y8 r
  6.   </div>4 ~/ _$ W0 W$ C9 e8 u1 s+ y
  7. </div>
    % M1 h- w9 j& K7 s
  8.    
    ) o; @$ ^$ C# ~
  9. <script>
    , e1 a9 T+ D) B8 N& V( k
  10. new Vue({% H- @  ~/ x8 Y4 D) V
  11.     el: '#app',
    0 C. ~+ v! S; y( Q' M
  12.   data:{
    6 |9 A$ y% R8 m+ J. m) t2 l9 y) e9 {
  13.       class1: false
    % P$ `) x  M" k: t4 o
  14.   }/ S8 u2 ~  ]: Q& e, N. B
  15. });  T/ L+ x$ B4 z
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">! n# Y1 W# |% Q
  2.     {{5+5}}<br>4 a0 ~8 U9 q2 C! A* L1 q
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    " o* H  _: C0 n7 b; Y! [
  4.     {{ message.split('').reverse().join('') }}4 M8 ?( q" Q. d0 Q$ Q
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>6 q  l& g7 N7 D7 G$ S) l
  6. </div>5 T1 X8 D; g/ V% S' d8 \
  7.    
    $ M. K, S  @  u& X
  8. <script>8 Y" D  i4 o/ t& e" v3 R& K
  9. new Vue({
    / a, x# N; ]- P. ~) ~
  10.   el: '#app'," a4 ?* \: i0 n5 P% u
  11.   data: {
    5 S0 \# V" g+ r' w+ J; \+ s
  12.     ok: true,
    3 _1 `& A2 d" i! [9 \4 k; A# X
  13.     message: 'RUNOOB',# x/ P3 O1 }2 T- J% q9 D- ^
  14.     id : 1
    8 a. s3 T+ y/ _, k
  15.   }. ?! G4 @: n2 p+ P, @
  16. })
    , f. A* F9 N' V6 z- o! ^. ~. M4 j
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">, ?; _/ ~  a5 l
  2.     <p v-if="seen">现在你看到我了</p>
    $ V& T' e% v5 ]/ I7 L, s
  3. </div>
    5 @2 L2 ~. A( N% O% x2 ?" Q
  4.    
    & P# o7 d4 W1 ?+ @/ d( R
  5. <script>
    ' a* T1 o' G5 h( E+ |" ~+ _
  6. new Vue({5 K$ @$ e! }" \: b3 n
  7.   el: '#app',8 a- F: q& V$ T9 F5 I' B
  8.   data: {
    - k: ]; D9 ~  k7 i' ^6 W+ ^
  9.     seen: true! k% e) h$ d  i* m0 o6 K
  10.   }
    $ Z9 G0 a- c+ E0 y# L/ m3 z; Q
  11. })" ]; J) E: Y8 j, z# R
  12. </script>
复制代码

) z/ @& e* l# v+ a3 |5 I
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    ! t1 c. q1 L  Q  X% Z
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
      N! K7 Y) b4 s) d# M' j
  3. </div>
    0 r: N( L$ \' T* [( B% I5 z' C* ~
  4.     3 x$ W4 b' ]7 }! A" f' x
  5. <script>7 ]2 O! W' ?* T; u7 n7 p
  6. new Vue({
    : {- _0 u+ \2 p; r9 x
  7.   el: '#app',% S9 P& J1 m( z
  8.   data: {
    1 e+ L) D$ Y1 h9 p* j
  9.     url: 'http://www.runoob.com'
    2 ~; {, e3 T. [3 c5 f7 ]  }7 ^7 Q1 o
  10.   }
    0 @; t  I' `( _
  11. })! J, K% t7 k3 h7 P; Q$ T6 [
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
! n$ t  A9 Z9 A+ V
  1. <div id="app">
    8 W9 o8 G5 u, y' _
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    $ {! p0 a( f, M* U; H9 O: ]& F
  3. 1 f. y1 t) Z3 a
  4. </div>
    & A, O5 E. Y; I9 r) Y4 M

  5. : C$ r& l) [' ~/ j, e: N; B3 y
  6. <div id="app2">) P% R9 X1 p; [  V: h
  7.    <p v-for="val in arr">
    ' i1 f/ b" W- i! T2 E, k
  8.     {{val.a}}  k. b( H. ^; A3 X
  9.    </p>
    * K* z  u0 U' m7 D6 P
  10.    <a  v-on:click="tap">点我</a>
    ) i& X7 X5 |& `' P' B! G
  11. </div>
    ! ~& F7 h6 d# T0 B+ J- |
  12. " R% R0 Y9 l- E! ?$ f5 u

  13. & d/ t* c5 U3 L
  14. <script>
    : @1 R  \4 y% X; ]- }! C! |+ R2 s
  15. new Vue({
    , h" [- f( P6 y: t; y9 W7 ^
  16.   el: '#app',& ^' D4 b6 v8 f8 W
  17.   data: {" T( _: _6 e% p8 L4 p
  18.     url: 'http://www.cncml.com'
    1 Y7 \5 m$ @) f/ }' Z5 z
  19.   }$ {+ `, F8 i4 H9 u
  20. })' d% H$ z$ H  Z8 Q, V( e
  21. new Vue({! a/ n: B/ G+ e/ B5 b) w# L
  22.   el: '#app2',
    / B+ T" [8 E9 K! i, }3 V- C8 h
  23.   data: {1 y) z% R. {+ v$ S
  24.     arr:[
    4 k9 U* V* x. P; [$ _
  25.      {a:'bb'},
    ! Y5 ]0 {0 ]5 x- z% }* @
  26.      {a:'cc'}9 o: E2 t& L! V' K4 F1 T
  27.     ]
    * \3 f9 R% T0 D; @: U
  28.   },) Z# E: [: A' B9 K6 ~
  29.    methods:{
    / L# z' r: R( A! [- ~
  30.     tap : function(){
    & J  J! ^8 C3 ]
  31.      this.arr.unshift({a:'new'})
    ( I1 \1 Z' V2 m8 E( ?. o
  32.     }8 {, W. y9 ?1 V+ |; M& o( k+ u
  33.    }3 n9 T" x  O# t9 u. A
  34. })$ u; ]& d, @0 a3 o9 }
  35. </script>
复制代码

; u! r; x; {: [" w# h1 b
8 A: L0 Y0 V' C  ~
在这里参数是监听的事件名。

% H+ }8 {2 F& ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 11:46 , Processed in 0.069819 second(s), 25 queries .

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