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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15962|回复: 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">/ o: q7 d1 L& P" w: Y: N3 S% k
  2.   <p>{{ message }}</p>
    . C) P; Z4 V9 l( {% e
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">' s# h# i# }: B, |+ m/ y3 f+ x
  2.     <div v-html="message"></div>
    % z, H6 `- q- }5 p$ u# Y- ?' [% }
  3. </div>
    . v' f9 _1 T. R! u3 J, s3 S4 A( y
  4.     1 K* M: o' a: f- P( B! T& l
  5. <script># o# Q$ x" L. y. d
  6. new Vue({
    , S- q# b" d5 b  r% N- ~
  7.   el: '#app',: `( S) ^% _9 X& M7 H+ s/ c" U
  8.   data: {
    & \, ^% }% g- a4 R
  9.     message: '<h1>菜鸟教程</h1>'
    , Q0 f7 ]; S/ i3 [7 j& g
  10.   }* y+ y0 c( M6 t7 ?0 T  n. u( M
  11. })* C, g! g. w& m" d# k/ {2 L
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    ! u2 j4 u( h$ R
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    + D: o/ s$ `+ i0 P# {& W% J, O
  3.   <br><br>
    8 D4 j" X- ~0 ^4 b- o
  4.   <div v-bind:class="{'class1': class1}">5 C& Y5 ~9 B  C7 o$ J( o9 W
  5.     directiva v-bind:class6 E* u0 x% M, j0 I9 q
  6.   </div>
    1 |% s- i4 i+ u2 M5 P
  7. </div>
    1 P7 {% `$ z0 {( `, E" Y; k
  8.    
    & c4 e9 L) z% l* r/ \4 C
  9. <script>0 r8 q: {% ]: X9 B0 T- m# b
  10. new Vue({
    $ e  M# H- d8 z+ t
  11.     el: '#app',
    # Q/ X. {, q& R4 l7 o
  12.   data:{
    3 z$ M, M2 v8 l4 h5 e, S1 a, [
  13.       class1: false! E% O; ~5 p% k1 q& C  ?# \- n
  14.   }
    * L6 v6 P' g2 [) k% D( I
  15. });# x5 d; ~/ }, r! ^; \6 I6 \
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">/ @7 `8 ^  A. e  g) Z
  2.     {{5+5}}<br>$ {/ ]! c$ g& y2 n) G% a4 L& ?# O6 n
  3.     {{ ok ? 'YES' : 'NO' }}<br>2 _1 Y& N$ a: y6 Z& B% b: I3 @
  4.     {{ message.split('').reverse().join('') }}
    8 h7 N) @1 v9 R( z. q' G
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    ( k+ z% `' Z+ j# k
  6. </div>. w' ~4 o' X% J' \" h4 V
  7.     $ @4 c0 r' ~  @! N9 F4 D- r
  8. <script>
    * H5 q  d7 S( k1 x/ d- h
  9. new Vue({
    , u' f- X& a4 Z
  10.   el: '#app',
    # ]1 g, C4 F5 B( {4 R( T9 K) Q
  11.   data: {
    ) n. @' p1 M! @& C+ k0 E
  12.     ok: true,
    7 Y, O+ _9 \0 }5 k( D1 c
  13.     message: 'RUNOOB',5 F( {# D. k  a$ K! R3 H
  14.     id : 1
    $ q5 `0 }6 w) v, j; }1 S8 _
  15.   }
    5 P, Y- D  ?5 x" v) |! Z
  16. })5 N' Y) s  `. d% `; I  E/ ]
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    5 E! ]) P6 T! f. s  {
  2.     <p v-if="seen">现在你看到我了</p>
    & @& I0 V+ C6 b' ~  V% m
  3. </div>
    1 L4 {% U8 ^2 k" y
  4.     7 P0 @$ H" W, j: [" d
  5. <script>3 H( q. q* Q( t" U! f& d6 x& t. i
  6. new Vue({& R; }, }7 o( y( G5 ]  X) K5 i
  7.   el: '#app',/ |: d7 e% A: H$ B! s' S
  8.   data: {
      \; B% N% J+ \+ d8 u2 \7 X
  9.     seen: true
    ' e2 ]1 u7 T% G
  10.   }1 t6 T4 ~0 y: q. w0 t+ g
  11. })% Z2 p0 w4 \- f# F5 L
  12. </script>
复制代码
5 Q% u8 V( c7 u
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">! D' @) H, O" x' Z" h/ v$ C0 }
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
      }, t! _( K- ]5 L
  3. </div>
    , K8 K, V2 ]7 P1 p
  4.     ; O3 i* |) l# X) e5 t! E3 j
  5. <script>
    2 N  N4 m5 b1 r
  6. new Vue({
    - K: t5 O3 u3 Y
  7.   el: '#app',( D6 _' w8 x( c" |8 }8 A& ]0 e
  8.   data: {! R$ ?/ y' ]: @4 k6 \/ _/ L
  9.     url: 'http://www.runoob.com'& ]. G( m. ~! C4 y# O" p) Q
  10.   }
    3 _4 z* l8 m6 U% |
  11. })6 `* X  C3 }% T$ P
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
7 w+ {$ C7 b- W% ^) e  D+ @
  1. <div id="app">1 [; F. d. w% v
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>/ k3 A& _- C* c, A

  3. ) G  C# j% l8 C$ p: ?4 S
  4. </div>( H. S9 L) k3 f5 Z
  5. 0 X5 P6 x" y6 B# p& W# U8 \& Z( I
  6. <div id="app2">
    3 w  Y3 P5 J+ X& Z$ `: e9 `; S) F
  7.    <p v-for="val in arr">+ o" @/ [- y$ i4 w2 I8 `" L
  8.     {{val.a}}
    - [% r! V3 c, K& |
  9.    </p>
    $ n, H. c% {* m, E2 @
  10.    <a  v-on:click="tap">点我</a>7 [) Z( u& F- _5 q
  11. </div>7 O* O% [* Z. Y0 X, N

  12. : w9 R/ Y9 T/ q% q. w
  13. 3 \2 b! B- [( l7 `8 s/ `
  14. <script>/ b% k  E7 }, r! D5 L" b2 C3 r9 C" K
  15. new Vue({& Z  v$ v6 {  H, |2 H
  16.   el: '#app',& K& K) c7 w! m& k
  17.   data: {
    + h) z+ _0 H2 L( q+ a/ N- _
  18.     url: 'http://www.cncml.com'& |& G$ Y1 x9 b+ C& {+ x# J
  19.   }  D6 u6 }6 I# U# j
  20. })% B% n: e, g* M; \4 n0 W
  21. new Vue({
    4 f& F7 |  N& Z* r0 Q7 X
  22.   el: '#app2',* L) J; C; M4 X) n! R6 F
  23.   data: {
    ' `* X3 Z% U. |1 {2 _3 H3 z" g
  24.     arr:[6 S. m. ~$ E! O: P; _
  25.      {a:'bb'},, P& X& R$ t; ^
  26.      {a:'cc'}
    - G: x  ]4 Q* E0 i' _: P  t) F, [
  27.     ]
    : y4 D( r8 x0 l; d( g5 _. s
  28.   },- P9 w  |, w* d: t, P
  29.    methods:{
    ! U8 c% l. k* y8 b
  30.     tap : function(){
    # a$ Y# ^1 h( n
  31.      this.arr.unshift({a:'new'})9 P" C, K2 f6 L4 m+ \& w
  32.     }
    ) O/ S" l5 U3 Z: s+ x% i/ s2 B
  33.    }+ r# w0 B6 h5 A& I- u
  34. })
    ; B2 x4 O; r: c0 Z* |
  35. </script>
复制代码

& h' Z/ c, p( @3 t. e
* z, v- W: G. J7 _: o
在这里参数是监听的事件名。
% u9 l" C8 S( K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 08:12 , Processed in 0.058377 second(s), 22 queries .

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