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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10768|回复: 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 T: R4 ?0 ?7 ]$ ^. r% O
  2.   <p>{{ message }}</p>
    1 v7 E7 w% k/ y% H( B; t% u
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    9 j3 O2 Z9 m- X+ k5 s% D
  2.     <div v-html="message"></div>
    & s3 d  M* k# C. r- M
  3. </div>
    6 l+ E- |6 p/ U1 }$ Z0 n& `
  4.    
    1 A4 @; H( ?& Y" ~! i4 I
  5. <script>
    $ I4 C' G3 _3 P
  6. new Vue({
    1 R. G  Z: y; b
  7.   el: '#app',/ z$ ^1 n6 p2 E( @" ~* `" n
  8.   data: {9 a  c. a. z+ ^1 L) b) x
  9.     message: '<h1>菜鸟教程</h1>'
    5 C0 ^& ^7 f6 m& Z) t
  10.   }  w* k& p/ i" M6 x& ^. W3 N
  11. })
    ) K5 t$ Q% d& E0 s! y
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    ( \! Q! F" a0 A. V* W7 G9 p% z% N
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
      X. X& d" C# ^8 U. X5 V
  3.   <br><br>% A! B% M) x5 r) V& N2 G
  4.   <div v-bind:class="{'class1': class1}">  E2 C* W: D6 X9 y; R
  5.     directiva v-bind:class+ F: W+ O' J8 p0 _- a5 Q' }6 {
  6.   </div>2 s1 Q- r7 n4 E4 z. ^  x- E
  7. </div>
    - c; a. ?' b8 {0 E+ a' o) w5 d
  8.     2 N- k* L' Q3 w/ I' n
  9. <script>5 w; f# j/ u0 b
  10. new Vue({1 y  e( f" O# ?
  11.     el: '#app',7 p/ b' f" k0 R. S6 W* H7 {$ `
  12.   data:{
    ) N+ m1 x0 i8 {- B. ~( |. n
  13.       class1: false
    5 x1 V, x$ P1 V  `: Q3 y1 w
  14.   }& T. e+ ]* x& r- C6 a' J3 c) J# |
  15. });
    5 \3 V2 c: y3 J
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">' W; u- T3 k9 M, S
  2.     {{5+5}}<br>
      K- D6 X( z/ D, V2 R
  3.     {{ ok ? 'YES' : 'NO' }}<br>& w9 d3 ?+ u2 i5 z) I7 p
  4.     {{ message.split('').reverse().join('') }}
    6 X& x6 P! i. f9 z
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    5 q5 f7 t, n1 e. N& ]  a. ~0 z
  6. </div>$ ^& m; `! _* X( Y: [
  7.    
    1 |) _3 W  w' ?4 x; F9 p$ m! H$ c
  8. <script>
    ; O( L+ {9 {7 g8 y8 Q
  9. new Vue({
    " ?; I0 |+ |0 `% C
  10.   el: '#app',
    2 c5 Q2 S2 ]4 V
  11.   data: {% _& r; {5 s" S5 o$ ~: Q* {# c
  12.     ok: true,9 f& Q" I7 j  T9 C+ S. V6 ]
  13.     message: 'RUNOOB',
    $ U, M7 \+ G8 F- t5 }
  14.     id : 1
    % [) H& _9 l4 G0 s& d5 r
  15.   }
    8 ~# E7 b& \# n- _1 }8 h3 f
  16. })
    ) z; Y  ?9 e* D( @. q9 |: t
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">, a8 L7 V: S6 I9 k% [* d- q( f! G
  2.     <p v-if="seen">现在你看到我了</p>
    3 ^& u  z& Y" r. z; W
  3. </div>
    ' O+ g4 c8 V4 l: m+ _* z
  4.     ) V* A+ O  m, F) f, r  s! f. _/ z) t
  5. <script>
    - f9 O% H$ z( k6 n2 W
  6. new Vue({
    9 g0 g. ?2 _  K6 n7 I- f5 p2 G0 N
  7.   el: '#app',1 T& E$ G9 A0 q7 I
  8.   data: {
      G% K) K, }  p$ c( ]6 ^1 W
  9.     seen: true0 X% l0 E% D$ @+ E' b" K
  10.   }- b) y2 [! Z' c' a
  11. })
    7 V7 e! P& P; F2 ^; N7 ^
  12. </script>
复制代码
- H9 b) m, A% V- P: Z
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">1 v- X9 l% O' x
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>* @. w2 ~! b+ j( j9 A7 t
  3. </div>
    / D4 n9 _! j1 P4 u9 I4 v+ t8 E
  4.    
    - m1 L3 o2 @' P& u; U
  5. <script>1 n! [! x7 [' C
  6. new Vue({) _" l- M/ T: ], r5 z2 z! j
  7.   el: '#app',
    ) }3 e! X, o: p2 e2 w2 r. u$ `
  8.   data: {. i5 s/ t/ ^, Z, Q  P* [
  9.     url: 'http://www.runoob.com'
    ! L( i% Z9 r" m) G8 l
  10.   }
    $ J3 o8 V: f8 X% K7 o
  11. })
    5 Z! }7 X2 I5 s  C4 s3 N% I# ?1 H
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
( f) k4 A4 E4 O
  1. <div id="app">
    $ S, C1 Z2 M, m6 G% l* B) g
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    + e; v  e& }5 J* K& `. x. R

  3. 2 T6 X, p/ i, b" g8 e
  4. </div>; E& Y0 i3 A4 Q1 S) [" s3 F

  5. " V; s. l6 m) `( X. G0 i
  6. <div id="app2">
    9 {( H" z6 O# Y' |0 K; V1 @
  7.    <p v-for="val in arr">% j) h' G7 j8 p) }& y# ]* h, `. ?! L' s- _+ W
  8.     {{val.a}}
    & X4 f! Q1 I$ c$ U
  9.    </p>
    4 q4 S3 R5 x6 ^1 Y+ n2 e& A  d: G
  10.    <a  v-on:click="tap">点我</a>! F, x! n8 R9 w8 A* p$ D, w
  11. </div>
    6 D9 x, s) a: C7 H8 `3 q8 L

  12.   J+ ?% E" t. ~" z0 x4 x
  13. , E" m4 s* j- G6 @3 j9 C
  14. <script>! V5 x7 y  \  G
  15. new Vue({7 P, }0 n8 r: E, h$ T. S! A
  16.   el: '#app',: q, g( o; T# ~( O& Z# x
  17.   data: {
    2 f9 z$ `0 `" i6 P. o! P
  18.     url: 'http://www.cncml.com'
    ( Y% ~3 V# ~* w: ^' n
  19.   }
    ! r$ K2 v. T9 A
  20. })
    9 t5 c5 \# x! k7 ^( [3 \+ Y, N
  21. new Vue({5 M. Y: J+ v0 y1 z! H' P
  22.   el: '#app2',  Q) r2 N9 g% u8 S$ E" {% V
  23.   data: {
    , W1 |2 u& [: H% v9 }! }
  24.     arr:[* M! B/ C1 I" |; [' d0 p
  25.      {a:'bb'},
    2 X+ O5 k7 R4 G. _- B) F$ {
  26.      {a:'cc'}9 ]0 ^  k% B; h4 v7 G9 x
  27.     ]
    * y1 o1 |+ q( S/ d( r6 Y8 c  s
  28.   },
      G1 k$ N% w# J1 f) x  Z: c
  29.    methods:{
    % l! C3 O; ?. Y. b; H0 u
  30.     tap : function(){
    9 Y- T  R0 O: `( t$ h
  31.      this.arr.unshift({a:'new'})
    # c$ v* N& `# M3 l
  32.     }
    ' }# K4 U! ^  s2 l6 o
  33.    }
    & c( F; ?8 L" \9 c3 b" {7 d, q
  34. }), G3 E+ ^: D7 a
  35. </script>
复制代码

! n# q0 Z8 s9 f0 T/ ?) N3 e, J5 }

7 i( q9 b) q& G' @
在这里参数是监听的事件名。

2 Q' O3 z0 O* n! S# f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-18 14:38 , Processed in 0.127299 second(s), 23 queries .

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