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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11678|回复: 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">" H% k% ?% ^6 A- r2 }4 d
  2.   <p>{{ message }}</p>
    4 F6 R& @  M5 o8 S2 t6 K
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    2 r7 E( W3 f. L/ m( Q9 G1 y
  2.     <div v-html="message"></div>
    6 u4 Y: T5 \6 }! M  i
  3. </div>
    1 e) @( B4 f/ e% P6 `+ j/ i
  4.     / x4 p" W5 ]9 \. h+ h( P+ a8 ?
  5. <script>
    ' y; v' u, V5 R/ d; W9 z  K& k
  6. new Vue({
    - T( ?' |  t. d% ~( q
  7.   el: '#app',, D4 o$ a0 T( @0 D$ O2 ~
  8.   data: {
    ( I$ G$ C6 ]* e; I+ c; O
  9.     message: '<h1>菜鸟教程</h1>'
    # A6 R8 Y+ k! u5 O! j# w
  10.   }
    3 O! {; z3 |$ Z! i
  11. }). {+ @1 O$ J9 X- ]7 r- M
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    2 {3 ]( l* @' {5 e
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    * K4 l; x* i9 U& h7 @) p
  3.   <br><br>0 E( S  r9 c! i8 h8 x' H6 {
  4.   <div v-bind:class="{'class1': class1}">
    6 Z5 L' L) o* w+ _9 Q0 e" G
  5.     directiva v-bind:class
    # t* ?# x+ o9 i: d) x
  6.   </div>; P6 C2 g/ b6 p9 E$ Y0 m0 J
  7. </div>
    ) ^3 m. F2 u. I5 v; H" d
  8.     ) I4 T; {6 o( y! J! h
  9. <script>5 L3 t1 K) W  d
  10. new Vue({
    & q  j0 h* D6 |1 q# U2 d! T
  11.     el: '#app',. Q* h% q2 @5 s+ [
  12.   data:{
    ' E+ L7 s/ u8 j( {
  13.       class1: false
    " z% ~, W8 ^1 ?4 m; _, s. n1 u
  14.   }, T( Q1 a8 G7 R" o: U9 h$ e$ ]
  15. });2 l' e: g& O8 j$ g* @5 W; J  I
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">3 t* \0 W7 B6 J$ S! Y. ~: H4 H6 K8 I
  2.     {{5+5}}<br>
    & g& q3 i/ m1 j1 s0 |# I% p: h
  3.     {{ ok ? 'YES' : 'NO' }}<br>" q+ n6 t2 w3 P
  4.     {{ message.split('').reverse().join('') }}  p6 ?5 H6 g. r1 M8 @
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>8 R" b5 z( ^# X1 ~, q) @8 P
  6. </div>& O1 X/ z5 K% e! Q( m
  7.     4 h) O. {7 R- F. d) S) \$ y5 B
  8. <script>
    . x% M4 B: D5 z5 K) \
  9. new Vue({/ i( x0 U% r$ C0 b
  10.   el: '#app',. G) ~- M; ~0 }1 A0 w
  11.   data: {
    % O" U6 `4 S9 Y+ _0 d5 [) [
  12.     ok: true,# }: t) q5 S3 N( o8 x2 M
  13.     message: 'RUNOOB',: M  J& K  v- k+ f8 T
  14.     id : 1
    : k+ O' U/ }/ G9 c* x3 {
  15.   }! E5 f" _+ x% i; W* V
  16. })
    2 J/ ~3 I8 _. Y  Z( i, w- U* d7 |
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">4 H3 Z7 V1 o  Y9 v7 l
  2.     <p v-if="seen">现在你看到我了</p>- }3 B4 \, U1 D' t8 \7 E) }
  3. </div>2 d1 p& y* b. d1 H, |6 W9 d
  4.     8 L  h" a7 d" @) o" w: ~
  5. <script>
    * Z& V. N7 s, a# V  M
  6. new Vue({6 ?: R% C4 ^$ y: p( j. l
  7.   el: '#app',0 V$ B1 H* g' n: |1 n
  8.   data: {
    / `& F4 z) C$ y. o
  9.     seen: true
    9 o5 g+ X, n  h% b; r. z; C
  10.   }0 \1 Z; R* O& J! p, v
  11. })
    7 |. v6 p( H6 X0 j1 s1 l
  12. </script>
复制代码

1 V& v3 A& W# }  E+ |
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">- l9 K6 V% \4 I1 v0 P% W; T
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    ! L  i( b) |1 Y( ^/ M$ [
  3. </div>3 M% R0 N, _/ h9 j
  4.    
    4 K6 s. P0 K# f3 L5 y/ W' M# \
  5. <script>& G1 v. T& A" b" T! r6 Y( ]! P( e
  6. new Vue({
    ) h, f& j. x, _4 K9 o2 A7 o
  7.   el: '#app',
    9 P+ o7 d, r# L! d
  8.   data: {
    : f4 T) R3 U; B  o) A7 u
  9.     url: 'http://www.runoob.com'
    9 N' W8 I/ }/ f4 o6 v/ B
  10.   }
    2 Y( x0 H: r: y& P1 V
  11. })
    ( B4 A. ]2 V+ ]- j( R# R7 F+ N
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
0 ?1 k8 k- W6 e3 g5 l( f. Q" n
  1. <div id="app">
    5 f, ]0 b8 ~7 D8 o$ z. T' T
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    6 y& i; K! v, P4 |! H

  3. ! ]8 g7 j# ?  q, x2 G# D
  4. </div>
    6 L1 g2 p0 R: Z5 X( _" t) F
  5. : U: `  G# `4 u' i
  6. <div id="app2">
    . n" H' r3 P5 h4 R" w9 G5 ~
  7.    <p v-for="val in arr">3 X3 f# ~5 r# U4 Y* Z& H
  8.     {{val.a}}. t0 ~: j1 l" \+ J7 u& V2 U: m7 G
  9.    </p>
    7 h4 F! M6 D% ?/ J
  10.    <a  v-on:click="tap">点我</a>% `9 L2 I. c3 J- b0 `, z
  11. </div>% ]# \0 B1 Z: {+ @. i1 {3 o

  12. + r4 \# v9 k; v7 K% r
  13. ( D( V  W7 X& A% |1 c! E
  14. <script>1 ^9 c: R, Z9 ^, a
  15. new Vue({5 ]* I; t0 z# E7 l
  16.   el: '#app',' p+ N; [- f, K! `4 m2 Y$ O$ m
  17.   data: {4 e, Q+ z$ @3 O' x. b6 H7 `3 j
  18.     url: 'http://www.cncml.com'
    9 L9 p' P* T: c# H
  19.   }2 G7 P$ E- X; g* F1 N1 M
  20. })4 u) n  e& p& X
  21. new Vue({
      |- R/ A) f4 J2 K5 Y4 {0 s! z
  22.   el: '#app2',
    # J! Y/ g$ E$ `7 E8 d  G. ?
  23.   data: {
    + u$ x. a) J' N3 p! y
  24.     arr:[
    / c" W5 h2 l0 L9 k
  25.      {a:'bb'},2 j% `6 s/ v9 O2 I& U. R5 U0 k2 D
  26.      {a:'cc'}
      f/ C6 `1 p' z/ f- U* b# @
  27.     ]' m' e+ M1 n# F
  28.   },
    ) D: S8 j( ?; L  k
  29.    methods:{6 ^' V: S4 J( s6 E' r+ A* ?
  30.     tap : function(){7 b, E; Y% f; Q
  31.      this.arr.unshift({a:'new'})
    6 B! f; F! C5 B$ E9 i' ^
  32.     }# v' U9 T+ t$ J. \
  33.    }, U) K, V2 ?- K
  34. })' ?, q+ n8 s; d+ g) d+ I; D( C& \6 `
  35. </script>
复制代码

& j; C! a3 }9 S2 f" n

$ z# o8 R0 |; @$ F. K
在这里参数是监听的事件名。

7 `: X1 \. S& V- d( A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-28 10:19 , Processed in 0.145026 second(s), 24 queries .

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