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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15026|回复: 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">
    $ j6 \( j" ^- n
  2.   <p>{{ message }}</p>: j( y8 l6 J3 _% A1 g
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">; n' W* ?- S- z8 s, Z
  2.     <div v-html="message"></div>
    3 s8 S. r7 ?, W/ j- E) l% p
  3. </div>" c+ M% }6 E* ?7 q  p
  4.     / K& M0 Z# Y* l* W& w
  5. <script>
    7 S7 L; H( ]9 V, r$ K$ F4 b
  6. new Vue({
    3 o% J1 G. W6 t( B
  7.   el: '#app',
    + N; p3 s+ i5 S+ |9 N% y
  8.   data: {+ H" W. B) G( j  [
  9.     message: '<h1>菜鸟教程</h1>'. v# y  ?& `( A. }# @- P) K2 @
  10.   }
    7 F. c6 a% _: i
  11. })1 e4 c4 h4 s  L# l" P6 P" r3 A. J
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    : ^* q6 m' N$ D. B+ y$ }+ W2 p) `
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    1 y" I! x5 t* _) C0 u
  3.   <br><br>
    2 ?- n6 X! m  f3 R
  4.   <div v-bind:class="{'class1': class1}">) w9 L/ t- H" j  H' b$ w3 D
  5.     directiva v-bind:class: D& M4 \& f+ A
  6.   </div>
      s% s" z, c- a! z/ L$ O# g, M
  7. </div>
    3 F( [- W3 w& w* L5 B* L0 E
  8.    
    # _$ |* ^6 _* E- z0 S
  9. <script>
    % @4 [/ L. [% J7 j0 p" @
  10. new Vue({
    + n6 A4 A# s" G+ x
  11.     el: '#app',
    $ ^. O; O: l  z! p8 t( y' O) J
  12.   data:{
    % s: R2 W9 X. I9 a2 e& W9 S* [
  13.       class1: false
    : H# z8 \2 P% b0 W. @" \
  14.   }
    " c6 r' p; }% C; b: F7 m# K
  15. });/ V, t! t9 w  b* ~6 k! p# |
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">' R9 S% K4 X4 l6 W( r2 {! D
  2.     {{5+5}}<br>$ G- H9 c" n& l5 i
  3.     {{ ok ? 'YES' : 'NO' }}<br>5 j# x' g7 k( h5 T8 k: Q
  4.     {{ message.split('').reverse().join('') }}8 O( q# B9 j4 V3 C6 U. K
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    ' v* S% U  g, f. d0 q' n2 |2 O2 P" K. Y
  6. </div>
    * I3 y1 n$ p/ ?3 o" r2 \
  7.     7 ?: r8 }* Z8 E) W$ G5 v* [, V
  8. <script>. s2 F4 X6 g( ~( q2 J7 M5 z4 H: o
  9. new Vue({
    # R. M! A  |+ v# ?4 k# o
  10.   el: '#app',+ a" q( x8 Z4 G- e7 ]
  11.   data: {
    8 R) P" n$ n! X: \
  12.     ok: true,
    + ~9 x% _- H6 j6 m" r8 c/ }4 a
  13.     message: 'RUNOOB',
      _' X1 a& ~, T7 Z7 R, f: J- K, `
  14.     id : 1
    : |0 ^* T$ Y9 H
  15.   }
    5 X: Z4 k1 z% G" g& [% R
  16. })
    . I5 n! J/ a3 f. x2 L' O7 }
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    0 _9 t0 A/ V6 W7 e) h. {" D
  2.     <p v-if="seen">现在你看到我了</p>
    3 I- E: J; h! {9 Q. Y
  3. </div>$ [" N7 g7 @' ]7 F2 B9 X* H
  4.    
    : c6 x+ W0 D; C4 q5 z( t- ?+ P
  5. <script>
    8 G3 e' S( h" e6 D2 w$ f, z
  6. new Vue({
    9 T* ?( ]! y5 O2 d3 H
  7.   el: '#app',% d  m9 X/ H3 }* P. Z$ b! y
  8.   data: {5 S. E  r. c: T$ l! w: f
  9.     seen: true
    + A! x4 ^% T2 u
  10.   }
    - `" z4 x& [- j* l' q  A! N
  11. })7 _7 S* g; _2 n) z1 M8 W2 K7 G% P
  12. </script>
复制代码

* \  {# _" |/ ]4 G3 w4 A- T
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">, {: f4 d4 a' \
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>' U. `7 N$ ^4 E
  3. </div>  b6 _5 _! U: [+ x* z
  4.     0 m$ X2 F( E6 }  k6 S- u5 H
  5. <script>
    8 [/ X# @5 m+ f9 t0 ~
  6. new Vue({
      y) R6 R( @- W: t
  7.   el: '#app',
    " u; k4 Q" F$ r9 w
  8.   data: {
    ! o+ L% h4 S+ I1 z5 L3 H$ O% u
  9.     url: 'http://www.runoob.com'
    + s9 F# ^( n, A! F2 v1 G
  10.   }
    0 x$ j, m! k0 m4 Z+ K
  11. })) M2 w% A; }7 f2 V% c3 j% D/ D
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
$ I, K3 M& ]5 l# w( j7 E
  1. <div id="app">
    ) ~" M* J! v+ h$ r
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    % W! |* o, c6 P/ k

  3. ) `) p0 q1 C. J6 Z# X$ i
  4. </div>9 L3 R# @9 L3 h7 B. b

  5. 5 v7 r/ c! E$ m- ]8 |2 B. [4 b, g0 z
  6. <div id="app2">
    . h% N& g* j6 }. Q- c
  7.    <p v-for="val in arr">
    $ k/ u% `5 C+ j6 V9 D  D. V/ g
  8.     {{val.a}}
    , h- u' |2 \/ X8 q, Z3 p, w2 @
  9.    </p>
    ; Q+ \% U" P* U* t  q+ h
  10.    <a  v-on:click="tap">点我</a>% u" l. ^- S9 j4 Y! H
  11. </div>
    5 x& y3 c' h9 T8 Z) Q& @
  12. % I/ @7 N0 E- f' l% Q/ o& ]; p. e
  13. ( n6 R7 P0 z5 A
  14. <script>
    3 ~  h$ a2 u2 a! Y
  15. new Vue({4 R; S4 [$ i+ V) g" r: t  H7 L* J
  16.   el: '#app',
    2 L. @% K- L/ R; @) i. b
  17.   data: {
    4 [) ^- w3 M- Z, S, S/ E  y
  18.     url: 'http://www.cncml.com'
    9 J3 ^1 ~+ `  h* J
  19.   }
    6 f( e7 k9 h+ r3 {" [+ N# F  q3 Z
  20. })7 \, ^' ~: t! q/ q
  21. new Vue({
    - o6 }( \# y/ R' G% M& x0 K  z$ t1 @
  22.   el: '#app2',8 `0 t) r  m: I$ }9 k
  23.   data: {
    ) \; M' i$ c/ P) M' x5 A: X8 c
  24.     arr:[5 A& }2 x# [& V2 ~" i
  25.      {a:'bb'},& K+ w; T( q. \! P/ s1 c+ }1 h
  26.      {a:'cc'}: o* @  ^. M  F4 O9 P
  27.     ]' ~1 K7 z& N& Y3 o6 l* [3 N
  28.   },
      D) j) L1 @: }1 H& a$ m4 ]
  29.    methods:{  C" }, a0 _3 S& x0 C
  30.     tap : function(){" H' m0 }% ^" G8 d
  31.      this.arr.unshift({a:'new'})
    $ }9 F& X2 y. y4 h3 D
  32.     }
    ; |& g  K( Z6 W# E2 F& @
  33.    }
    0 F5 m% _, ?! ?+ b, U/ J
  34. })4 s" I- z3 p% S# l
  35. </script>
复制代码
- e$ \- n) Q  g0 P

6 I: ?1 g# o5 x2 o- Z( U
在这里参数是监听的事件名。

6 B) \9 J' J6 e% _+ M4 |, C' T8 g3 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 21:47 , Processed in 0.064366 second(s), 23 queries .

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