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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15967|回复: 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">
    / c" O, Z% L4 V
  2.   <p>{{ message }}</p>
    2 E- q1 Z" ?1 Q3 ]. x; `9 C+ f3 b
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    4 ?2 ]/ h, F- @/ s4 `
  2.     <div v-html="message"></div>
    6 G: Q5 V8 [" ]9 Z
  3. </div>
    $ v, f$ A, C, t3 [% |" f
  4.    
    # I( N; B2 x/ t- B7 u
  5. <script>2 I! w* U4 }% c# z2 P4 s6 Z6 Y
  6. new Vue({
    2 Z2 x& J* Q" q6 E) s: m9 |
  7.   el: '#app',$ e/ y6 w2 u- [. M( E! Z
  8.   data: {1 E! n7 P6 `* k# o( ^; [/ ?2 h
  9.     message: '<h1>菜鸟教程</h1>'" g' n6 D9 @! f, W4 y
  10.   }
    9 ~& Q/ z! U; \
  11. })8 x8 S  I) U6 U1 ^! E( g% x' n9 Q
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    - T- v0 n1 E* X% F$ S$ Z* ]
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">. l5 T* G) g) c  x8 d! k
  3.   <br><br>
    / T! N* D6 |+ ?9 T0 d; s* Q. A
  4.   <div v-bind:class="{'class1': class1}">: c0 q) C+ e. H1 ?  B
  5.     directiva v-bind:class( W( G5 L9 _! [2 z
  6.   </div>
    " ?5 w1 V; a% R
  7. </div>
    " R, P" ?/ t- [% I$ N7 ]9 S- ?
  8.     9 u6 [2 C( k' h" C! m( c
  9. <script>
    8 y! A1 k. p, N: S# w4 w
  10. new Vue({
    ; B0 [# n' B( {# N9 Y
  11.     el: '#app',
    2 K: ]1 A6 F, B" d8 k$ Y. V: G
  12.   data:{& n# ~1 }( B# v
  13.       class1: false
    " J3 g2 Z( Y9 g
  14.   }1 L- v; [! y0 d! ?' s  o
  15. });
    5 O- N8 ?# X7 v
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    / \4 I, W( W/ D. F/ L( G# f
  2.     {{5+5}}<br>0 y/ \1 }; G) r* O+ R
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    3 B* l9 @, S5 w! Y: l7 N8 e2 H
  4.     {{ message.split('').reverse().join('') }}
    * \5 k3 }( H( I2 m7 `
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>4 H% ^/ k! W3 H) _' K
  6. </div>
    6 V" d2 y4 ?5 N
  7.    
    1 i% ]0 u/ S+ L$ X7 n' ~
  8. <script>
    " T& T) r( N5 d: W
  9. new Vue({+ d7 X; r; Y% z* D
  10.   el: '#app',
    5 K4 e) M! Q2 x- m
  11.   data: {) f  I- |+ K/ ]& W
  12.     ok: true,: U7 o8 G4 ?2 Z. s1 T7 }7 Y
  13.     message: 'RUNOOB',
    % G* B8 X( x( B% n/ t% F# c3 [8 E/ ?6 X4 q
  14.     id : 10 s' T8 Q' ~% L; N7 F. z. Z
  15.   }
    ) Z4 K  r& E/ |% [
  16. })3 m# p5 A' V- B% L# g
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    5 Q) P" O% B+ O' \6 l" y: r
  2.     <p v-if="seen">现在你看到我了</p>
    / N; L8 a  S3 ^0 q" D) b( j2 \
  3. </div>
      v: F) f) d- D9 ^0 ]2 o+ A
  4.    
    / {8 d6 f* v" K$ Y- v
  5. <script>1 d/ S! F$ X0 Z9 ~/ |4 _" j
  6. new Vue({
    ; d8 h  J+ V6 _" c5 R
  7.   el: '#app',
    : d1 d3 g. A$ V- {8 r2 E9 L
  8.   data: {
    + B9 s2 ]9 O, Z/ A  h2 @, P- M! T4 @
  9.     seen: true3 r& [1 B& R( S0 y3 v) I- E( p
  10.   }5 Z) ^. _: K9 Y( j
  11. })* }: S1 n' n2 h7 C# t
  12. </script>
复制代码
! i/ j8 i( P7 T& u/ E
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">: m$ n5 e. T  u, V" \
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>7 I1 ?# ~" X% y. c* [
  3. </div>) n, o; S& C2 Y9 `! ~4 E& N) G$ J
  4.     9 n" Z" m% H) r0 v$ |" [$ ?: @! b
  5. <script>
    6 P; [/ E5 N4 N
  6. new Vue({
    6 o; {' K' j% }4 |, l
  7.   el: '#app',
    3 U* I- N% r/ W# P0 z
  8.   data: {
    ; |! q1 t# _6 o6 \4 B
  9.     url: 'http://www.runoob.com'
      y' |/ [2 j/ ?5 |0 [
  10.   }
    4 w: b) q3 X0 e/ a
  11. })+ {( l, Z/ O# _- X7 K/ K
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
  L6 j+ c2 Z% D0 @
  1. <div id="app">
    $ ^, W6 b6 K; R
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>" R+ O2 h* [7 y4 V% a
  3. 3 u# Y  g+ [7 ?4 C5 |
  4. </div>
    , n9 M# M: L/ Y% C7 ]
  5. 6 i. p$ q- X$ ]9 Y! }; A7 j" i
  6. <div id="app2">
      g9 v2 z7 j, c; r2 E% [9 J6 c, F
  7.    <p v-for="val in arr">
    # [3 W6 ~3 k, Y0 o) T, @' @
  8.     {{val.a}}
    : X' `3 \2 C. W& P+ K7 e& }
  9.    </p>
    2 [  U4 k8 Q9 m8 A! A3 i
  10.    <a  v-on:click="tap">点我</a>' x" {  [2 m& T6 i6 Z: r- O
  11. </div>
    3 z3 m) i0 r, H' w3 _
  12. % t1 |: t: X" ]  z5 L; k' h
  13. ' `3 K1 N' [( J) R' m! j$ Z, \2 T
  14. <script>
    6 L6 @* z. [' d+ m* ^1 H
  15. new Vue({& h- L7 r8 j# Y- h9 S$ d+ y9 ^
  16.   el: '#app',
    * j: P% g" ^* y/ m, E1 F
  17.   data: {0 d0 z$ j4 c2 _7 D1 O) N, r
  18.     url: 'http://www.cncml.com'
    0 S7 p$ \. m# i! ~3 x; L
  19.   }
    8 D; e: K8 u* a; n4 P& F
  20. })" {% ^  t8 n7 z( [) ?: r0 N
  21. new Vue({
    6 u$ c5 Q% D6 a6 r' Q  P1 `- `
  22.   el: '#app2',
    ( u+ R2 H" d$ u
  23.   data: {
    5 |5 _5 G+ G8 x
  24.     arr:[
    ' v8 k6 q% H& S
  25.      {a:'bb'},
    + V# H. b5 H: f/ c$ Z5 u3 B. Z6 v
  26.      {a:'cc'}
    . F$ @2 j0 O1 q: t; G- {; h1 N
  27.     ]- H0 ^3 N6 E5 D
  28.   },9 o, p) P2 u# A8 l5 T) U
  29.    methods:{
    9 A# X  n! E  j4 V
  30.     tap : function(){
    1 X  j5 c" @2 t# q% M
  31.      this.arr.unshift({a:'new'})
    # r4 H; W; ?8 U  f  R
  32.     }
    1 D9 V/ b5 M- l! h: p8 r1 Z) B
  33.    }
    / V: I; G5 H, a; S
  34. })! v# h! k" h3 B* d) A, u
  35. </script>
复制代码
$ @# _; }2 d/ v! L" v* ?  H7 D# {
9 Y2 ]: m2 Z; V; V
在这里参数是监听的事件名。
" V( Z4 d+ d; G% y) X' _1 c0 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:54 , Processed in 0.053022 second(s), 23 queries .

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