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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15021|回复: 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">
    : F! K3 d( X1 q; i0 Q% z6 Y
  2.   <p>{{ message }}</p>7 ^3 j. H6 \3 v' n' ?3 K' E5 H
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">9 B% t' l# V' N: O" T  ?) n# V$ m
  2.     <div v-html="message"></div>3 P/ E9 a9 T9 I7 Y( f' o5 ~3 @
  3. </div>% q+ W# c& ?* {/ y: H
  4.    
      r% Z6 v; D) o' e
  5. <script>
    * k# ^+ C, N0 N3 |) d
  6. new Vue({% c8 _$ R- l7 T8 ]$ q
  7.   el: '#app',+ f0 T+ B2 t" {4 U" A9 c
  8.   data: {
    ( ^/ P5 g5 W; W$ h8 a+ E- k  }: K
  9.     message: '<h1>菜鸟教程</h1>'
    " Q1 R6 z8 G' S0 K" v3 [
  10.   }
    ; R' q# B6 n3 h" ]0 a1 C7 \
  11. })
    5 d0 K7 o% T; q1 q
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">5 N/ x/ |: }& |9 I$ u
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">5 z9 p' A6 l+ i  V2 o5 r" Y: P
  3.   <br><br>$ E0 t! Z! E1 \8 T2 f: a
  4.   <div v-bind:class="{'class1': class1}">
    # [0 H, o/ s/ a8 e' y
  5.     directiva v-bind:class! n6 `; }' P7 Z4 k8 A6 D7 @
  6.   </div>3 y) ?7 h, v$ F6 x2 _% V
  7. </div>
    % b2 U) _! Q+ z! N) i5 z
  8.     ( f6 @8 H$ R1 P' |
  9. <script>
    / w3 m/ L5 r3 c/ {& {
  10. new Vue({1 H" v" D' `) ]2 V/ t. U& E) ?
  11.     el: '#app',* f7 p/ C* d# g" _4 x$ o
  12.   data:{
    ; n& c" R7 }+ y
  13.       class1: false
    & O8 f. J+ E- i6 ^# [: y: S- h
  14.   }
    + [9 K7 k4 E4 f- j$ P
  15. });( n' A. I! X- {0 r' t4 }7 ]
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">  F3 b. q! S4 l: X; j2 E
  2.     {{5+5}}<br>
    ' U9 M" D. R; P8 }
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    1 o  G7 a1 g! n
  4.     {{ message.split('').reverse().join('') }}" }" i8 `2 r+ |3 t
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    / j& p- z* B5 m6 m  [# F
  6. </div>2 [# Z( k+ \+ Y5 {- t0 S( q5 T0 q
  7.    
    ) w% F3 W  b. b' K% y, l4 a7 [. r
  8. <script>% b5 U& f( ]9 n, ]) a4 |
  9. new Vue({
    8 T! |9 ]' {1 ^
  10.   el: '#app',6 s2 ~; e) S% m* i7 C
  11.   data: {
    5 j! r9 e2 _: B: `- L9 y
  12.     ok: true,
    0 {4 Q$ r7 `4 l3 Z; {* U% W
  13.     message: 'RUNOOB',
    7 O& W2 q! q" v( B
  14.     id : 1
    + c5 M/ X; }3 N0 I, [) F
  15.   }
    2 l( A) y- _9 Z
  16. })
    7 S) |3 }& Y! G3 {
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">6 d* u/ _  x; ?4 E9 q& ^, F
  2.     <p v-if="seen">现在你看到我了</p>
    ( Q  \! `/ s% \7 G+ D  L
  3. </div>
    ! L) Z3 L6 ]3 n: c1 i7 _
  4.     / x% J, m' M7 T7 H9 n6 f  o7 E& W
  5. <script>
    ( T5 p4 H: `7 K; L5 T* x
  6. new Vue({% P; N0 t; G# R& h) J  `( M) g5 e: p
  7.   el: '#app',2 L/ ]( w. ~6 s& M! z- B
  8.   data: {
    - J5 ^5 u& f! @1 @: V
  9.     seen: true( G: h; I% _% s; Y3 G
  10.   }
    % [& J# ?+ K8 l1 O& k* d
  11. }). _2 t5 j+ H4 d3 w  r
  12. </script>
复制代码

  N- @  E9 @9 Z$ N  v; b
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    " c4 K0 Q. f2 [5 g/ ^& \" W% E4 @
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>; m  }) k1 g7 ~3 v2 Z- n6 o
  3. </div>
    , L, p+ `% w7 s9 P' e
  4.     9 g, \. i8 n& Y0 `  P9 P
  5. <script>
    & Y  |* M) X4 ?
  6. new Vue({8 B- z& a1 W8 z- s! d
  7.   el: '#app',7 x4 r# ]4 O( `2 _* X+ r. O# [
  8.   data: {6 a% g* V7 d7 e5 K
  9.     url: 'http://www.runoob.com'
    % ?  G8 g% X, R) J
  10.   }
    2 i4 S6 [0 \% h" R4 I6 L9 L
  11. })# v9 |" Y4 Q$ Q
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

! [3 y5 J: b  S  Z4 d: ?) V
  1. <div id="app">6 I! t! j6 I% ?; D; r5 x% c4 n9 b$ X
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>5 _" r. A" p  V: x4 A; o

  3. . M8 v/ \  h6 f4 G7 @
  4. </div>: i/ x- I( w" Q: O$ l- b

  5. ( m% f$ a% L2 @
  6. <div id="app2">$ b6 i+ Q* Q. ^& N
  7.    <p v-for="val in arr">
    6 i5 r. v$ [9 X4 L) \2 |
  8.     {{val.a}}
    7 y% h+ f" v% J2 P& ?
  9.    </p>' p% U6 T- W0 `+ t* }
  10.    <a  v-on:click="tap">点我</a>) Y5 b. c5 i4 a( S; ?; d
  11. </div>
    . `% D9 T( j- h4 h7 b* K- G* e1 n2 K2 V

  12. + B4 E$ t$ X0 k( C9 j

  13.   u  i: q( m/ X! N3 Z
  14. <script>! _6 {; r' I; _. X1 t
  15. new Vue({" z% f: `+ m( Y4 F4 R: g
  16.   el: '#app',
    8 l6 Y" a9 ~; W8 d
  17.   data: {! n* M  ^* S, `1 z# y* ~7 W
  18.     url: 'http://www.cncml.com'# y! u3 `5 g# D  d# ?
  19.   }$ E& A3 U9 L3 s4 Q, [  @6 s' ?4 K
  20. })
    3 w; ?9 p4 H. ?  e
  21. new Vue({
    ( a" O7 [( o) f6 p4 c
  22.   el: '#app2',. K! X* a8 g% L- D
  23.   data: {6 D$ o5 a" w6 T1 A0 _* y. O
  24.     arr:[
    1 S( G0 E: L+ Q( n7 {8 j: [
  25.      {a:'bb'},) n) D& n* j3 J& C- }1 b/ T2 w  X6 u
  26.      {a:'cc'}+ R. ~! F0 |: h- d4 Z
  27.     ]
    * m5 C" J5 Y  i7 G
  28.   },
    # l. q2 N2 F, R1 n7 H
  29.    methods:{( E* G; [/ p; X4 A/ u
  30.     tap : function(){
    7 ~( y; a  n: ], D3 q  X
  31.      this.arr.unshift({a:'new'})
      ]: @' a  ?  i+ ]3 ?3 l6 D
  32.     }1 D& f, r* {2 n* N+ q
  33.    }
    , Q  R/ \8 X: r; j6 B% _( D
  34. })3 M4 ]) R# a+ n4 C: R
  35. </script>
复制代码
9 b6 i% @, G+ M( r- k# \* A" s
) F" g% d7 v2 C& s) s3 E* {9 ^
在这里参数是监听的事件名。

* p) {2 G7 ]7 D5 i& t6 M1 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:00 , Processed in 0.076203 second(s), 22 queries .

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