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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11177|回复: 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">
    ; j0 t; L0 j+ U$ G( [0 j8 F
  2.   <p>{{ message }}</p>
    ( k' v4 V4 ~# t" s; ^: ~8 `
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">- e$ @$ y8 n  P2 U
  2.     <div v-html="message"></div>
    ; v: M' q# F9 P' t% |  e! u: h2 K' v
  3. </div>- t. H7 q, i) P8 d
  4.     6 p) U9 v# F9 d* F. P
  5. <script>6 w& K& t' f( d
  6. new Vue({
    * u( q- {5 X7 |& A+ B$ R
  7.   el: '#app',- j. p" Z# \, \/ d  w
  8.   data: {( T7 d) [4 R3 l3 }% L5 ^
  9.     message: '<h1>菜鸟教程</h1>'. a3 V% I1 Q9 ?& {0 f
  10.   }& [. [( c9 l9 D: p1 s9 F% R7 J
  11. }), I/ f& V$ j5 [4 V/ p' a* Y& T
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    " J& ~" B! g# Z
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    " d$ j9 h7 K2 a, o. V0 h6 {
  3.   <br><br>. f) ^8 Q' ?: E6 p
  4.   <div v-bind:class="{'class1': class1}">
    7 i+ Y8 R/ v; `
  5.     directiva v-bind:class
    ' n  @, N; D% D  \
  6.   </div>0 m1 L* z# ~6 X2 g: `- W
  7. </div>
    ; C. P$ r8 E. x* h* _! y) B9 o
  8.     $ {2 g3 w) H6 q' n
  9. <script>
    9 ~; U4 c  c6 B/ T
  10. new Vue({
    ) E7 e' t* H+ r+ N' l
  11.     el: '#app',
    " Z4 Y. `% l- p& m0 G% n% s* K
  12.   data:{5 k! j$ X5 I& f8 L9 ]+ B+ y
  13.       class1: false
    0 z' ^" q  n3 p* D
  14.   }
    8 M1 Q$ S: a" e+ r* n5 d
  15. });- R8 O% _8 o6 j
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">+ h5 ^: D7 x! V( p: q, F
  2.     {{5+5}}<br>
    6 j3 Z+ M5 k% B$ ^" L
  3.     {{ ok ? 'YES' : 'NO' }}<br>- V9 R) M( x, r1 E$ d) s- s
  4.     {{ message.split('').reverse().join('') }}! G/ |- N8 t/ u$ v3 [" R5 q
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    + H9 L* B9 ]' m0 P3 C: N
  6. </div>8 W+ z! `; X# _* C
  7.     ( q  w6 E( n7 L9 a
  8. <script>: i1 i6 q, F) ^+ r5 E* Z
  9. new Vue({
    ( i' z8 K! ~& e5 N* h
  10.   el: '#app',1 u. Q2 |' n' K6 ]8 x
  11.   data: {
    ! F8 D) L0 _; T$ A- P
  12.     ok: true,( }2 _% s2 ^9 m0 c/ }8 X
  13.     message: 'RUNOOB',1 S; y0 i$ H+ H& l0 q
  14.     id : 1
    ' S1 ]5 d8 G. N9 f( S) o- s0 Z' b
  15.   }2 n- a! ?0 P) y! f
  16. })
    4 w" K0 O, G) p8 h0 b
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">7 l8 i+ L: ]7 d8 @* j
  2.     <p v-if="seen">现在你看到我了</p>9 d% u& E, h# _- e/ S' N
  3. </div>" d1 C+ U( g8 @$ z* E. d
  4.     : Y- x( B- X7 p
  5. <script># ?  J% O6 |! A  N+ ~
  6. new Vue({
    $ o- }0 g, k' }( B+ K6 R
  7.   el: '#app',8 M0 p2 p' ^, K3 D( S- ?
  8.   data: {  U0 q5 y& M. I
  9.     seen: true) J9 ~/ V8 F. E6 a  |
  10.   }) @% q: V6 x" [& H! V
  11. })/ G2 }% [$ ~7 R6 _$ B# U
  12. </script>
复制代码

1 s% N, h! ?5 K( g* a6 Z8 R
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    ' e+ Y: F+ e& R" H( p' u) k; }
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    % d8 i  B' U" Q( i* t  n
  3. </div>: h$ l# f0 z5 J! ]% ~4 b& h/ t
  4.    
    , t- b. D5 e' M5 M+ p
  5. <script>. J/ Y& x- _2 R: d* t  P6 v& l
  6. new Vue({
    & ^) J  h7 j. u) W
  7.   el: '#app',
    1 q# L( o- F5 _8 ?3 }( T
  8.   data: {
    6 z3 L& S' g" p& \9 s; N# O
  9.     url: 'http://www.runoob.com'5 Y1 F. |' \% C; W  t0 i
  10.   }
    9 u: U8 p, u+ N7 a4 P; `
  11. })
    ) \& `/ H8 n& |5 }' \9 `; j6 i
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

$ z$ E. R# o9 J1 E; Q
  1. <div id="app">
    8 ]9 |% X7 W4 l% U
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    - l% Q( p; i4 x; u2 K! g( z

  3. 3 T6 j. s+ Y0 ]+ u, w
  4. </div>9 [6 ~( P$ D+ m: d# d6 x

  5. + M/ T$ ~# E4 k/ c
  6. <div id="app2">
    " \* U2 \7 n) J/ M  J
  7.    <p v-for="val in arr">
    # [6 {& d/ B+ f1 D8 V% @$ b& ]
  8.     {{val.a}}
    / j8 A; y$ @) X, M+ u- B/ z
  9.    </p>
    ' j. w$ m: f9 @, X  o2 I% `
  10.    <a  v-on:click="tap">点我</a>; i7 |) i$ K0 h( i
  11. </div>
    / h/ U; X+ i2 P% N/ x6 q; e3 F" t

  12. . M* ?7 [! u) I) i' l* s! b
  13. . U+ }- k! ?% {- I* i2 h5 O: H1 v
  14. <script>" d7 B8 E* [( H; x: N
  15. new Vue({* U# t) j& o+ F# J8 L: A. B
  16.   el: '#app',
    1 G) C0 m6 `, V3 j) s* p3 V" _
  17.   data: {; t! U8 {( G5 ?) g
  18.     url: 'http://www.cncml.com'
    ' F7 O( ^5 X9 G/ x
  19.   }
    2 t0 d2 A. }3 I, e5 H% J0 G' ]
  20. })
    7 ]9 [9 O  w3 }' {5 ?/ Z2 u
  21. new Vue({( Q6 p9 R1 }: N
  22.   el: '#app2',/ y; p$ K# _0 B) N$ d* J
  23.   data: {
    * i1 y5 y: P8 K) t! Q+ |8 ?( q2 e, ?% E
  24.     arr:[  h* A9 ~% w  u
  25.      {a:'bb'},% d0 a" {* a8 T! j. a( v6 h- a0 C
  26.      {a:'cc'}
    4 t& W* j" h- Q
  27.     ]  G  G- x1 Z) ]- M! [* f- v/ \' a
  28.   },
    0 J- ]3 C% {5 Y6 R' F# U
  29.    methods:{9 S; Q0 u# H3 g8 H5 t
  30.     tap : function(){
    , d7 @: v, P2 e2 o3 B) [
  31.      this.arr.unshift({a:'new'})( T) V& f# l5 ?% ^; @& N
  32.     }
    " K- V3 A0 W3 \7 [& l- k
  33.    }
    - @% Z( B; n8 k4 \" p; W. P
  34. })
    ; V+ c0 H$ I0 ^& `' |) l7 M2 A
  35. </script>
复制代码
$ S9 h$ S& u9 j8 D( X* N1 g
5 z' A' ?2 _$ j1 C
在这里参数是监听的事件名。

& a: j' M5 c2 T5 `* w; M- c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-6-18 21:02 , Processed in 0.123492 second(s), 22 queries .

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