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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15028|回复: 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">
    ) k9 c, D% w/ G/ A( q5 S& a( Q- y9 N
  2.   <p>{{ message }}</p>
    , O, q# e& a4 |1 j" n  ~9 u
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">3 E) [8 g- q4 j' t! j/ N; J9 A! ^
  2.     <div v-html="message"></div>9 p" t; S/ j/ `. U& a
  3. </div>; x9 g' ?& y- U9 `: f6 _
  4.     . A" ^8 U, Z- z* [2 \
  5. <script>
    3 X9 J0 Y7 O+ k; e
  6. new Vue({
    ! J$ S! U4 {' W$ b# h
  7.   el: '#app',
    " v8 u$ d, }" Y) {
  8.   data: {
    " i3 Q8 ^4 v0 ^! c7 V5 Y$ ~0 ^- [
  9.     message: '<h1>菜鸟教程</h1>'0 C: E$ A1 Z# O( w6 p3 n: N
  10.   }8 T+ f' q( a, ~* K- b* k: K
  11. })  Y5 c, g: P0 e1 g- m
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">% J' u8 b! e! R" X0 d
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    : I5 m) M7 l, t6 W
  3.   <br><br>
    - y3 m2 Y  C+ `
  4.   <div v-bind:class="{'class1': class1}">
    2 J6 j0 Z, x. w: {7 }9 F. w2 K4 j
  5.     directiva v-bind:class9 f4 q: n+ k! q# T3 f
  6.   </div>8 I+ d" H& E* }+ {  A2 S
  7. </div>( Y/ ]: n5 X, A
  8.    
    , \- L5 z% L, h; n' l" @
  9. <script>
    + E; }" @9 J+ ]( B
  10. new Vue({' q; Q2 C6 T% A, Q+ @# e
  11.     el: '#app'," |2 \- q9 j$ q
  12.   data:{
    ' b, l, G3 Y5 ^
  13.       class1: false
    ) s1 v) d' j; E" s
  14.   }1 k) l) s) `4 F" ?) E
  15. });
    / n* Y6 @- F5 j3 G& p" O1 p5 N! v  r
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    ( h2 P! H) `- {' D4 S
  2.     {{5+5}}<br>
      ^6 V  ~5 ]% c2 g1 E' b  L
  3.     {{ ok ? 'YES' : 'NO' }}<br>% Z$ l* y( o4 ?; m/ M' Y4 U% g: O
  4.     {{ message.split('').reverse().join('') }}  O% b# A" u$ g
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>4 D7 X) m5 A: i
  6. </div>
    0 \& m9 |. W  r1 J! E5 n7 e- u
  7.    
    9 Y$ O3 i* J4 k$ z
  8. <script>
    ' R: M3 ]3 G6 g# h( I# v3 d
  9. new Vue({% n2 k/ u" g/ e. A0 e
  10.   el: '#app',
    - f, A) Q* n+ E6 R, p- W
  11.   data: {
    - U& o/ t, ?+ X0 z% H
  12.     ok: true,
    . V$ w$ t3 H3 \+ y4 y- k" B0 V
  13.     message: 'RUNOOB',# L, P8 |* ?3 U4 z# J% A
  14.     id : 1
    / D; q" b7 c/ K$ [. @$ `9 ^
  15.   }/ A/ g( T, b4 M$ B
  16. })
    , u" ?' j4 d( v% U0 c% x6 n
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">6 z. i+ e9 J  `; v" H% U, X$ ~: T
  2.     <p v-if="seen">现在你看到我了</p>6 i! F0 X2 H  r4 ~1 O
  3. </div>
    0 s% x1 Y. v. w6 g3 x/ g5 v/ q
  4.    
    ; U) M1 ~8 q6 O# }; i1 a
  5. <script>& }) r/ }- R0 W/ |5 L" t
  6. new Vue({
    4 M2 b: a/ F; j# o' x6 w
  7.   el: '#app',
    ! L7 R3 I0 T  T  l0 ^1 o
  8.   data: {6 g5 H* |  f5 a. y
  9.     seen: true
    ) X9 M2 |+ Q" f
  10.   }
    6 b! ?) u! D+ ^8 q$ w* z, _6 x7 _
  11. })7 u  Q8 r4 M, U
  12. </script>
复制代码

  r7 @  i# e. d- I/ A, E9 @0 s
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">0 y4 ?! ~+ |0 Q9 S3 |/ B
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    % a+ |7 T; S- W* M( J  U
  3. </div>; S( q. q' K! X" t" B
  4.     3 l( _( k" Z4 t8 J2 ~
  5. <script>) Y" \& f9 K1 f& f9 v
  6. new Vue({5 A8 [1 [' e& ?
  7.   el: '#app',3 d- ]* k6 b# |; w1 l% X
  8.   data: {) M) ]- p2 ?6 a9 l: P1 h/ _
  9.     url: 'http://www.runoob.com'" r( u7 ?3 J% ?+ S/ C
  10.   }
    ' b+ F7 t* L: ?4 Y9 q
  11. }); b, s- A. a9 ^8 K. j" N
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
5 a1 M4 F+ v! r0 F
  1. <div id="app">- @% W" [9 Q$ N0 ^+ f1 J/ H: E2 `: R
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    ! T7 w2 X: `8 B; R
  3. % t; v4 D4 k6 m# r* z# c3 D
  4. </div>
    6 ?7 w+ O% [( U5 r, O1 Y$ F2 x4 d
  5.   l" [2 J( i  k7 U9 z! H% {
  6. <div id="app2">
    0 P  j- P+ B( U. z: N
  7.    <p v-for="val in arr">- e6 b2 }' g2 Q
  8.     {{val.a}}
    ' O9 Y/ _3 k9 X: D. |3 D0 v7 S3 Y
  9.    </p>  C5 Q9 h% |  j+ G4 t& W- F
  10.    <a  v-on:click="tap">点我</a>
    7 V1 _+ H" b! y* b5 P9 u0 i
  11. </div>
    ( E# z0 |8 Y$ s" ?; m
  12. ! `+ D0 q6 ?3 z' H

  13. ' I" A' n# G* o( p
  14. <script>
    9 Q; Z5 t0 [2 \4 X7 R. w6 O7 s
  15. new Vue({4 T& h6 J  @; @' U
  16.   el: '#app',
    9 g& D8 K+ f1 k( j! V% D
  17.   data: {
    5 ^: a/ ^  \, _# W: V
  18.     url: 'http://www.cncml.com'; O' e* O2 l! W0 I
  19.   }% W- Y2 Q# W" p0 Y% I  A
  20. })
    * f  u' C1 R5 r. {4 |
  21. new Vue({5 ?/ Z' |$ O2 x; H; Y5 I& t
  22.   el: '#app2',# q; U' F7 R4 @1 K% n7 D0 i
  23.   data: {# Y; N$ L4 X$ a
  24.     arr:[
    1 o: m  y* k' q$ u8 X
  25.      {a:'bb'},
    % V0 _& }2 n" ]
  26.      {a:'cc'}0 b3 J: ^# i7 M3 C9 [2 T) E
  27.     ]
    ! n9 O. h2 D9 ]0 q6 x
  28.   },
    / C: F% @- r9 V9 U
  29.    methods:{' H" Y8 t0 V5 B$ b, f
  30.     tap : function(){
    / P9 J& M: S1 X8 g& r
  31.      this.arr.unshift({a:'new'})& t0 R& F" n+ p
  32.     }
    - T+ c7 N6 q2 |  p
  33.    }1 l1 O# o- \4 i3 l& v( B, u
  34. })8 y" A- }$ o/ G
  35. </script>
复制代码
  Z3 ]6 S$ |, S$ o
+ o+ q- I8 U, P+ d7 H1 N1 Z
在这里参数是监听的事件名。
9 x$ J2 A; M. H# \, ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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