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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15966|回复: 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">
    $ G* R1 k6 g' N8 S) N! y
  2.   <p>{{ message }}</p>
    . l% d+ `+ C$ ^' ^! f* b. _
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    . e- k& T2 z9 K* U! s
  2.     <div v-html="message"></div>
    % f. F3 S1 J# V+ X# i1 @. C
  3. </div>
    + G1 I$ G# ~5 d& O4 J
  4.    
    ' Q3 J8 k: h  _7 {' f2 }
  5. <script>2 y; }5 ?6 x5 {" s" [
  6. new Vue({+ M, c# o4 u( `8 l0 O* W' Q! Y5 d
  7.   el: '#app',' X! w/ Y- o0 W' N8 \# `, I
  8.   data: {
    % X1 I/ J2 v- C9 r+ O8 E5 w0 Z
  9.     message: '<h1>菜鸟教程</h1>'- S' U, G* }! L/ h: p
  10.   }
    # m/ N0 x' C9 j0 Q7 P" F
  11. })
    . c& r8 z4 k; W( I# X4 L0 {
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    ; l% S" e$ W  _
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">$ k( u/ O8 t6 D- B8 h
  3.   <br><br>
    : F, F3 Z( I6 H' d3 Z+ h# L
  4.   <div v-bind:class="{'class1': class1}">
    ! M/ Z* ]* b3 k. b, B3 P7 ?
  5.     directiva v-bind:class
    & F* X" q- O5 @+ c
  6.   </div>
    6 q; G( @4 }5 v
  7. </div>
    $ a6 c9 L9 Y* V7 X, c
  8.     $ j$ r' G! _' @
  9. <script>! O. g% D; s) n4 g1 Z8 r
  10. new Vue({1 J; D( g) ?. a- T( ~' O
  11.     el: '#app',( r: v# v7 W, F4 j
  12.   data:{
    - `3 _) E+ r# }/ l( m6 }/ V
  13.       class1: false
    1 t  s2 v7 @4 Q7 H6 K" u2 l) [
  14.   }+ N! s/ H9 l; b5 M) I- H
  15. });
    / H/ L6 z& w" R4 E* ]8 _- X
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    & T! Q6 F& Y( N
  2.     {{5+5}}<br>3 m+ }: u9 a5 v" {% h5 U* H& }8 s( j
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    ( u, e% \" Q" h$ H& d" N
  4.     {{ message.split('').reverse().join('') }}
    . A4 q- u6 C: b( c
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    1 `0 m" w: e" ?5 n: b6 ]7 s% k) ?
  6. </div>
    / Y% `$ s6 u2 a2 b
  7.    
    - D; ]* I( J6 Y/ b/ Q
  8. <script>& c  O( w% R3 P. i' q. N3 m$ ^4 R
  9. new Vue({* L0 B1 ^1 b4 R! c: k  A% q- k
  10.   el: '#app',4 N8 \* O' C8 U
  11.   data: {
    ( Z7 ]6 h; N$ j9 w, n- g  G
  12.     ok: true,
    $ ~; J# o7 V+ I) ^: W/ t+ I
  13.     message: 'RUNOOB',
    , ?- o5 n  _; G9 `; ?! a
  14.     id : 1
    * Q5 z  E/ V+ u9 M2 p7 H' s% _
  15.   }
    : l: `1 R0 N' B5 N. r5 E. {3 j# w* A
  16. })
    - H- J6 s) v4 k3 ~, E* L
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">% p% H6 q, W  `" {3 T
  2.     <p v-if="seen">现在你看到我了</p>
    9 e3 b4 U5 y: P
  3. </div>
    * K) n* {. U; }3 P
  4.     0 g. T2 B* D5 U/ g, q' L
  5. <script>. M  x: P4 V+ M" c/ O" J
  6. new Vue({
    6 m4 X' A- @$ @4 p
  7.   el: '#app',
    # {6 X' U; R! h$ u: w" c/ k
  8.   data: {$ R. a9 C, P/ x1 p) k, v
  9.     seen: true
    8 ^0 Y7 n  z- O0 v
  10.   }
    ; x' W3 t4 M6 |$ Y* \) M
  11. })
    2 K- d  s0 N4 a7 x9 C) M1 w
  12. </script>
复制代码

( i, M: z) n7 Z) a, t1 t
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">0 }8 l$ n4 M! d
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    + T. _* H$ E+ D1 q' P: I
  3. </div>
    0 ~' Z' `% l7 r% \' p# [
  4.    
    7 p1 ^( ]- y- F: d( p2 |0 b
  5. <script>7 @' @0 D9 q  W$ ?! e
  6. new Vue({
    # E8 O/ e+ h7 ?3 K' M% x+ d; ]: G6 d3 q# R
  7.   el: '#app',
    ) ?$ q( c: O8 t( j" ?
  8.   data: {
    ) v# d% b% ?- y0 R6 ?) f( M
  9.     url: 'http://www.runoob.com'
    5 o8 ^% M3 J/ x% ~5 m) L0 k
  10.   }, J" q% `9 C+ r) z7 B! U$ w
  11. })2 G; v8 K/ S& F8 Q5 K* b
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

! D. K- S$ l, F8 |- \
  1. <div id="app">
    ' o8 L% r1 }  W4 B# \) W
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>. Y4 G* `# ]5 F" I

  3. : M+ F' U) L- R2 ?9 V  S3 ~
  4. </div>
    " b8 ~, t) o2 o6 L+ Z9 B# r2 W. v
  5. 6 _) G1 x; B5 ?- b5 `' P
  6. <div id="app2">7 o9 r8 |2 @' t7 Z" I* B
  7.    <p v-for="val in arr">  a0 d. I5 v" h) k; n* g' H0 [( l# x
  8.     {{val.a}}( ^7 X8 b4 P: J% {8 F) C" f
  9.    </p>
    ( N* }& s- X7 d2 H# g
  10.    <a  v-on:click="tap">点我</a>: [# G/ K1 l$ V+ v, R) S
  11. </div>5 u6 ^& n& f2 F! x2 G

  12. " Y0 S) @! ?% \: W) }& y# v
  13. - d' B2 U& b. H8 U4 w9 @
  14. <script>9 s5 T$ |% r% K" q, {( s. O' F- p- y
  15. new Vue({
    ' f! p# i0 F8 Z
  16.   el: '#app',
    # y3 i& k' L5 ^! v, u
  17.   data: {: O( C3 K7 \1 @( s) C" G
  18.     url: 'http://www.cncml.com'' F* C* b3 O' @8 Z( `  V" F
  19.   }7 P; y  v: X" c' R
  20. })* r4 h/ Y8 s# d. s$ w- P
  21. new Vue({
      D8 e* a0 @0 c$ c9 P- k
  22.   el: '#app2',
    5 L* ~6 p5 l2 @* b  K1 X) W; h3 s
  23.   data: {+ r. d( @  v. m( `2 f$ L0 I8 \7 g
  24.     arr:[$ e7 @' u7 {1 S5 m2 k6 b
  25.      {a:'bb'},0 C6 L* Q  m% F2 I
  26.      {a:'cc'}
    ' a9 k+ {$ _6 x! d6 g8 q
  27.     ]
    3 ^) G8 k; @7 Y+ ^' }1 D, V; F' l
  28.   },
    2 ^/ u6 t& T9 z' p0 Y/ z- Y
  29.    methods:{4 _  p# A1 e3 {; O
  30.     tap : function(){
    3 a$ O" G9 R- n, \. r% I
  31.      this.arr.unshift({a:'new'})3 r: p2 o( q4 s
  32.     }  R9 V6 M! O. h! B- Q  Z% Y9 u
  33.    }
    ! y1 _5 q9 I. t, t1 I
  34. })
    ; n# ], e3 x2 R3 b( {! |
  35. </script>
复制代码

1 t8 w4 `* g  t8 a6 {
3 @* U3 D- P3 h7 w# {2 _8 U9 P9 y
在这里参数是监听的事件名。
& {  ^4 g; e- ~9 U$ A% |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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