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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16499|回复: 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">; t$ [: A& m. }
  2.   <p>{{ message }}</p>
    5 i6 {5 V2 w' Q4 g) ~. Q  S
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">7 m5 w% e  `% V/ r  F  L* ~2 C7 a
  2.     <div v-html="message"></div>! v$ r# p) H  g; P2 U! l
  3. </div>& C; ?5 H: ^  B) t7 \
  4.    
    9 ~, E3 X" T1 R- }
  5. <script>
    # m& L' o# Q: b. R3 q8 ]- P
  6. new Vue({- C( E& P+ x/ J7 _4 q+ z3 C3 M  V) ]
  7.   el: '#app',
    * s; N1 C$ z5 s. J! P
  8.   data: {7 ^* M& O; g* E# b$ `& j$ q5 R) g
  9.     message: '<h1>菜鸟教程</h1>'1 d# k. j) G- L8 Y, D* g  B
  10.   }
    * Q  O% l9 l- J( w
  11. })
    $ T3 F8 j9 B, E
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">4 L4 @: W) \( F; ]* b7 g" s
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">1 {" v( L+ S5 C4 J
  3.   <br><br>
      u* n2 x' P/ l' [% l3 S
  4.   <div v-bind:class="{'class1': class1}">
    ! T- i& v8 z, ?3 E% W* l3 n* a
  5.     directiva v-bind:class& F% J/ K9 z/ {0 c' `* C! N6 m
  6.   </div>
    ' D: z* q( S" x& @
  7. </div>( ?& h) ^9 i6 B' n! ^( w
  8.    
    3 O" D  \# a8 y* S0 Q
  9. <script>. `% L# N+ a2 e; ^) Q6 W9 S+ C3 b6 a
  10. new Vue({1 a8 J9 o: ?0 R0 g0 V8 O
  11.     el: '#app',
    & z- N3 D, G5 `* p
  12.   data:{
    1 C7 X, X" o7 B  T7 e* x8 ?  U
  13.       class1: false
    - g" T0 u& Q8 q0 I
  14.   }1 j5 D$ `4 c9 l2 R
  15. });7 G+ w& {; Z  c. B. j
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    7 q% O2 _. f7 u! L* A
  2.     {{5+5}}<br>
    % h. y# ]: D0 q3 b* `
  3.     {{ ok ? 'YES' : 'NO' }}<br>/ ]6 p+ b4 o" C2 P* l6 Y5 Z5 X
  4.     {{ message.split('').reverse().join('') }}) g! ~4 a! H* E8 q
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    , C) ~, T2 S/ ^
  6. </div>5 s. l8 @& j4 `. e0 a
  7.     - Q' o7 V* F  \2 T7 e" A
  8. <script>) U3 p# f% J7 u# L1 u
  9. new Vue({
    2 j4 {- p& Q, u% f! r0 U
  10.   el: '#app',
    - e+ f( q9 S9 C. |0 y1 m9 t
  11.   data: {3 g. E' @( H6 o, K
  12.     ok: true,
    " {; ?% M" ~9 y
  13.     message: 'RUNOOB',0 z, {0 W5 U& F. @
  14.     id : 10 s! D3 t* e+ Y4 U, l( l
  15.   }
    * q3 n' V2 f9 z- E+ x
  16. }). w) f+ t: }- _4 W% [
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">1 H! V5 S0 J, I1 E) I
  2.     <p v-if="seen">现在你看到我了</p>4 g6 A/ @" D, }
  3. </div>/ h0 J; z- j1 C
  4.     ; n* T% k% Q: X3 I7 U/ E
  5. <script>0 C: P- f8 r% Z$ @  O
  6. new Vue({
    + d; U& x# k- m9 C$ o
  7.   el: '#app',
    0 g  o! {0 q' \
  8.   data: {
    , G+ A# |+ o- J
  9.     seen: true
    ! z0 x8 ^7 [3 A7 `+ q
  10.   }; {9 B- s2 ]# M$ ^: A" ^) m6 x, q
  11. })
    5 A! G9 I. R& b2 h
  12. </script>
复制代码
7 c6 ^7 U3 v8 W) L% v7 v
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    & Y  r# g6 M; u( J' k/ L( J( C
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>9 A( R" C8 ?% i; D8 w; D& s
  3. </div>
    # M4 r- X) h# E6 D' x' M! a+ i6 Y
  4.     2 l- |% d+ }, k, P# N7 _4 j% J$ [& n
  5. <script>' g9 g9 Z/ ^5 p. G2 J3 h4 [( p  O
  6. new Vue({' m4 u  Z% f- Y7 I: x* H- `
  7.   el: '#app',+ |4 C  z* s6 X& H3 D! G( R
  8.   data: {
    ! X1 a5 K6 J8 `. _
  9.     url: 'http://www.runoob.com'5 |) z4 l/ p# x5 W( d
  10.   }3 I( R2 v' ?" Z3 ]/ r2 e/ J
  11. })* {8 C( R1 |# Q: e& M7 b
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
% Q+ t2 e) c* Q, ?+ \* l
  1. <div id="app">- Z6 d2 K# B; W# C5 n$ ?
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>) [% C2 n1 y1 ?' ~
  3. , [* p$ O2 S2 x1 `: u
  4. </div>0 ]7 O+ N" |: W, K% W. E
  5. . X2 r; X/ p* a$ c" V, E- ?
  6. <div id="app2">
    8 V7 Y1 P, S  h
  7.    <p v-for="val in arr">
    ) E) j0 r: I4 {$ a( s
  8.     {{val.a}}* d! }3 d3 }4 k: i) p7 e+ G+ Z3 A# L
  9.    </p>7 d4 k8 x" h( B4 o# q$ J6 l9 X
  10.    <a  v-on:click="tap">点我</a>5 {8 |  Q* q% A0 Z8 O5 Q% e3 _5 A
  11. </div>+ X) f6 y* C. j0 `. J( [& I- r/ s
  12. 9 W" w4 S( B4 D  F

  13. 2 i! s. O; ]4 @0 r2 N
  14. <script>
    7 D% K  R$ m, l" Z, e/ f
  15. new Vue({  u: m: y' {9 P4 F
  16.   el: '#app',
    - B# u7 T4 y* R1 r2 w8 Z
  17.   data: {
      M7 G$ Y# s7 S9 f' [7 S
  18.     url: 'http://www.cncml.com'$ f+ g  y/ T7 F
  19.   }
    # {. Q' G( d$ ?6 C) k9 I) a
  20. })
    . f$ L% w' A( \
  21. new Vue({
    & i( C3 D1 H# g7 z" m
  22.   el: '#app2',# ?% q7 \* f' }! M
  23.   data: {
    6 [) o5 g4 L6 W9 z; r
  24.     arr:[
    & H! D4 i. _" h# T1 ^
  25.      {a:'bb'},
    : O" V# w( `! f# C7 ^8 A/ h2 I: u
  26.      {a:'cc'}8 p6 p" F: B) J( B5 f, A
  27.     ]
    0 `) J& S* y# T1 o  n1 q5 B
  28.   },. s5 ~/ m: r  t9 n/ H, b: u
  29.    methods:{3 U: d5 N, A" n- K5 d' M9 [* _) E
  30.     tap : function(){
    $ e: K/ @# S$ x. X# W+ z( B5 ?
  31.      this.arr.unshift({a:'new'})
    / @" J2 b( f$ o, X
  32.     }
    ) S: l" l4 _' ~+ }2 Z( q
  33.    }" C: ^" T3 w$ n  S2 a; D
  34. })2 {7 L: ~. [( _- S/ p  j. g
  35. </script>
复制代码

# H/ v) @; H4 Y0 r' m3 [. T

4 f# E- `' r6 ]1 U) C
在这里参数是监听的事件名。

  J$ [' _& f! a, ?. I9 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:14 , Processed in 0.055936 second(s), 22 queries .

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