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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15321|回复: 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">
    1 x& ^8 X+ N2 b7 X% S5 ?8 Y  K7 R
  2.   <p>{{ message }}</p>* {  n) x; Q9 J7 Z! S
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    ! B9 P7 Y- Z& s! w
  2.     <div v-html="message"></div>3 W7 p; p, {5 f, ?
  3. </div>% R" ~) ^9 U4 o# @
  4.     ' e- i4 I5 ]- d! b4 n9 L7 u  r
  5. <script>
    ; ^0 B' `/ ]8 O1 |
  6. new Vue({
    + G0 J. I$ S6 _  P
  7.   el: '#app',+ \' q6 j7 a) H" h& H" @0 P
  8.   data: {
    8 o. r# m6 Z$ O  D  H* y; s
  9.     message: '<h1>菜鸟教程</h1>'
    : _+ F: L  n4 V& Y; W9 n5 F
  10.   }' m+ ]5 a; h% v7 o# U3 N& j4 [( f
  11. })
    . L' c* d6 M+ o
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">5 r2 H9 j' ^& J2 i6 {
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">5 n1 Y: C1 R9 w, _4 f: a
  3.   <br><br>( R3 s. U( r( m+ |8 C$ l
  4.   <div v-bind:class="{'class1': class1}">
    & u$ e9 X: U6 l8 I9 Z
  5.     directiva v-bind:class5 _- h$ A1 r- U/ N& U) }& B' {
  6.   </div>
    7 `: G( q- ?! i$ M
  7. </div>
    6 ^; T) _/ p, m4 I2 \' h
  8.    
    " K) g9 i0 {6 f* G- b
  9. <script>
    * h) c+ s/ y. s# b0 f7 N& P: |
  10. new Vue({" e  ~/ j8 x9 ?  G
  11.     el: '#app',
    - n. o% O9 q9 Z+ J1 C
  12.   data:{* @3 ~7 |; Y: Q" T
  13.       class1: false
    9 {/ \" n# T& O4 f8 B* f3 X" i
  14.   }
    2 k  m! B) D4 I6 r9 j8 m& Z
  15. });8 e1 s% r2 H6 K& Y. J
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">8 P# `! d  Q. ^( \
  2.     {{5+5}}<br>
    ' u6 X0 L8 I6 B9 g2 @
  3.     {{ ok ? 'YES' : 'NO' }}<br>  D" U+ j  j) j& R2 Q
  4.     {{ message.split('').reverse().join('') }}
    1 z$ a0 [" o% q6 C' G
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    - Z* r3 M7 b( |. ^5 l! ?7 T
  6. </div>* T- o- D8 F0 f" s* o! ?
  7.    
    1 z5 C$ m4 V4 p5 ^* A
  8. <script>6 [" G  i1 V" L' ~  k6 D
  9. new Vue({
    ' M9 M* h5 l. z% b( W
  10.   el: '#app',5 j8 s* a. i( g
  11.   data: {
    4 v, H% F+ x/ X
  12.     ok: true,/ K/ [; X  `% Q0 |
  13.     message: 'RUNOOB',
    9 `- G( E2 ^6 Q% d" W5 `& X2 i
  14.     id : 10 z# d% G& J7 B7 Q
  15.   }2 J; ]7 B4 e7 x) Q/ y+ j
  16. })5 b, ~8 }3 P2 A
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app"># L) J( ^( v# O
  2.     <p v-if="seen">现在你看到我了</p>
    ' `$ ]  p' {9 _: a! n3 h# r% T' L
  3. </div>
      J: X, b1 j% P
  4.    
    + x% D$ }5 y7 k9 y& ^  e
  5. <script>
    6 _9 ?) ?) i' b5 Y& z! J) c
  6. new Vue({
    9 ^2 [7 B9 D+ R0 k  Z7 ?9 ?' w
  7.   el: '#app',( \% H) M: I1 C; _6 h6 F/ i
  8.   data: {
    " I) n2 u: R0 `
  9.     seen: true* s6 S  m8 @: H1 S
  10.   }. b' j; |9 Z/ c2 y" o3 D4 a" \
  11. })
    ' e2 P' x& w" P& D
  12. </script>
复制代码
) W3 c; m3 R" b+ q3 z! G0 X
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    - M4 n$ q. O( `. D% A
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    9 ]  M$ Z5 `5 l
  3. </div>9 K" h* }7 R6 O/ Q/ ]6 `# U* f* x
  4.    
    % M- y$ d& F# C* G4 ?' `
  5. <script>  L4 X& A3 q' ?5 ]+ P' L" H+ c
  6. new Vue({
    6 u4 p) X4 F& f! W
  7.   el: '#app',
    3 p! [  w% R6 _) [. u
  8.   data: {
    ! W+ R' c# o3 u8 b% C! Q+ v% P9 d9 N
  9.     url: 'http://www.runoob.com'
    0 M# C6 _, [3 [" ~5 V  ^
  10.   }; U; {6 W$ G7 Y4 E: N. d  l1 b
  11. })
    * z- W6 g( g- h1 U
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
5 a2 s0 U& r$ W6 ^, [
  1. <div id="app">
    0 N( S! `, X+ z! T9 d8 H( f
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>8 j( e6 i- {) x, [; o& G/ D

  3. 1 S" G# M' A+ C7 z: z4 w2 A
  4. </div>! [* j/ w+ w% U; O

  5. 5 Z2 `! g' o' I7 E
  6. <div id="app2">( i& T. {( H4 W: }
  7.    <p v-for="val in arr">  w: h- g( c# t" o8 |' I% l
  8.     {{val.a}}7 ^' m0 s; W! e9 ~3 d
  9.    </p>
    ) p9 t" e' m' [
  10.    <a  v-on:click="tap">点我</a>
    ; r  g- H: @  @/ U: u- f
  11. </div>
    & n% j( M/ u! x8 I5 L

  12. 9 `1 L4 M. A% O4 V1 I% }9 S* O4 Z

  13. ) W% i! W' J; b
  14. <script>0 {  J$ y8 X' J6 V. b3 g- U* J
  15. new Vue({: D% X6 q: B+ h& u9 s5 W; Y. f( @5 m4 v/ _
  16.   el: '#app',
    ) D9 z* n7 s" ^  x& G
  17.   data: {
    ' `; |, D+ [7 g9 p7 e
  18.     url: 'http://www.cncml.com'9 q2 x6 {) |1 R6 P6 {' Z  t
  19.   }
    ) @4 W2 ?' ]9 [
  20. })
    . c- H2 e3 _4 a* ~, D. U! t+ G
  21. new Vue({
    % G$ S- a) _4 _- X/ c  z
  22.   el: '#app2',  l, n; W3 M" O* s4 C2 s% X% J6 P
  23.   data: {; ^! w% O2 Y6 l. q- h: D" R
  24.     arr:[
    0 p8 _2 S* U2 C) y1 e4 v7 E- W
  25.      {a:'bb'},
    7 X8 M. Q; ?1 i. Q% I* E
  26.      {a:'cc'}
    , j* L. e3 t1 Q5 b, ^% [2 L
  27.     ]
    $ }9 r$ K4 p2 @: l& h/ [0 z; c
  28.   },: u0 y& P7 U4 ^4 m) f# c$ n
  29.    methods:{8 J7 p! e1 }# k( ?& ^
  30.     tap : function(){
    $ ^3 g* K/ m  ?& a3 f
  31.      this.arr.unshift({a:'new'}): g6 E4 G- O' P/ M- t
  32.     }% x) E. d  A* S: ?
  33.    }
    6 u( e: b8 d- I; |* t! f8 [* n& `
  34. })
    0 _" K  a+ s2 O% o, z! Q4 q
  35. </script>
复制代码

9 i1 f/ Q, c9 \) s6 x
7 Q+ M9 H. m. M' H6 `  \. E
在这里参数是监听的事件名。
$ ]) I9 A% Y' O0 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 16:18 , Processed in 0.061522 second(s), 24 queries .

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