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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14878|回复: 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"># Z* ~+ R7 g% ?
  2.   <p>{{ message }}</p>) q6 D. U( U1 b$ |
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">' _. W% E4 D4 f) [
  2.     <div v-html="message"></div>
    , {6 i* ~4 }% }
  3. </div>
    5 ~1 {3 D6 d* w% F: o# |2 k6 L, G
  4.     9 e9 r$ U! y" T" y1 q: T) w
  5. <script>. W; O8 r4 X. k+ l; @0 ?
  6. new Vue({9 x( V* u6 z5 v! g8 m; F! i1 F2 h
  7.   el: '#app',
    0 b6 {# _6 j- M/ ]! W; a
  8.   data: {4 Y2 _( J2 ?: U! @' T( f& B7 C' f
  9.     message: '<h1>菜鸟教程</h1>'
    ) s' E/ N# z2 P' A  H
  10.   }! o, |+ h0 O1 [! j3 G
  11. })
    : w  y1 {. _2 m1 j& L
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    $ I6 D6 h+ N. U
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    : H( r1 D  Z' |/ [* Q
  3.   <br><br>0 }7 Q6 {4 I# D0 _0 c) }- ?( J5 P
  4.   <div v-bind:class="{'class1': class1}">
    ' I9 i, [- D  _* b
  5.     directiva v-bind:class; ~! N+ Q) p" ^2 u1 y
  6.   </div>) T. l$ a" I: f5 V2 |
  7. </div>
    " {& g. S- y+ }! F; c- X
  8.    
    , R2 o1 K7 {$ H" v9 v
  9. <script>8 M6 x  y$ l' B" w% g  [8 X1 a/ ^
  10. new Vue({
    : S+ E. O" J+ V$ |6 V+ X9 A6 @
  11.     el: '#app',) w. F. n! W, E- t5 ~
  12.   data:{
    3 c$ k: _4 e3 q) f' r
  13.       class1: false
    2 G9 D- n$ C# V
  14.   }
    ( u1 R- j/ J! D
  15. });
    # f2 O& L; l' Q3 S9 u
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    $ j! P8 M! h- z
  2.     {{5+5}}<br>! ]) S( O& n+ S) [) i- a' p2 J% k8 Y: ?
  3.     {{ ok ? 'YES' : 'NO' }}<br>  W6 Y3 `( [: F4 M4 d. I8 m! T
  4.     {{ message.split('').reverse().join('') }}+ ]1 E6 X8 g( d3 P) H
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>; @/ E' @; Z/ |5 s8 F: |0 \
  6. </div>
    " [( I5 V  |2 c6 t# e
  7.     % X- y* \+ a, Y+ {# c% ?
  8. <script>4 ]( Q& a0 s! h; Q, g" c+ N/ m3 i
  9. new Vue({
    ' X0 R8 W" T4 Q" X2 v
  10.   el: '#app',5 u! s+ w, r- y: @+ M
  11.   data: {5 j& G7 `+ C% d+ q/ e4 T
  12.     ok: true,
    : _3 m0 I. R. I0 z
  13.     message: 'RUNOOB',
    9 S3 V" }2 A9 y+ p" e
  14.     id : 1
    + D7 Q! f4 u  c0 d
  15.   }1 D, ^# g; ~% ^8 Y4 ~
  16. })
    4 a" ~9 `8 O9 e- |$ e3 m% k
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    ) \: S: d7 j5 L3 f! T5 J
  2.     <p v-if="seen">现在你看到我了</p>) Q! q( m( Y6 E% W+ `! a+ B
  3. </div>
    ) j" o7 c/ c" g( y+ u: E9 ]
  4.     , q8 H4 ^# u3 J
  5. <script>
    / ^$ y4 k) P; p4 @: N
  6. new Vue({2 I( ]7 L- Z- m0 W4 F# ]! ]3 W) f
  7.   el: '#app',! w1 l/ D* z/ A' ]
  8.   data: {7 c4 }3 F' w  y! J! E! C9 O9 j
  9.     seen: true
    + z$ e, T, v& W* ~$ z
  10.   }
    : S) C6 r) u+ \' k1 v( j5 }
  11. })
    . v% R/ w8 |6 m& e! b3 w% H4 ~
  12. </script>
复制代码
& ?( g) G4 t0 H7 J9 r0 E8 m
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">+ U  S2 l- {) w- H# ~' s
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>. j7 T3 \# h7 I6 `& Z
  3. </div>/ a( [3 w& t2 K4 Z, h$ N
  4.    
    $ `4 p6 m% ~- b3 w5 j  t2 H$ |- y- y
  5. <script>
    7 y+ v" T" _8 K" X" _5 ~
  6. new Vue({
    3 z- [& o" W3 t0 c) d
  7.   el: '#app',
      W$ X7 z$ j4 e; r  ]5 L
  8.   data: {
    " K. W- ]6 {, J/ o8 p+ W% Y
  9.     url: 'http://www.runoob.com'
    * g! P  Z7 n7 W% N8 X
  10.   }' P8 O$ R/ b1 d; w9 M
  11. })# [1 G( W* Y8 d! h% a0 y) F8 I3 e' N
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

1 `; e+ h  l; D8 o0 R: `  [) J
  1. <div id="app">
    - P) X6 H0 `3 j7 s/ y
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>* q2 l: n5 G0 W: Z) Y$ E, c: Q
  3. 1 i4 @8 v3 j/ }9 J7 `( ~
  4. </div>
    7 j2 E7 _5 P+ v6 u
  5.   P# E' {: I1 Z; l" D3 T6 d
  6. <div id="app2">
    5 ~/ @, B, G, e7 g0 \) C- [0 M# n4 [9 d
  7.    <p v-for="val in arr">
    1 h  D! m( |1 [7 c+ Q
  8.     {{val.a}}
    ' [" H1 F: G2 G) m( G$ T. d
  9.    </p>& k9 N8 s* i0 p% Z! |
  10.    <a  v-on:click="tap">点我</a>
      x% ~/ @5 |$ m  A7 [
  11. </div>$ @- Z1 Z; d# p8 x# ~* [& g

  12. & X5 v" G; h  l6 r3 f" Z
  13. ! {% W$ g" U8 W* |! e' M
  14. <script>
    " G9 C: b; P; C) u- d
  15. new Vue({
    8 A* Q2 E$ Z: b9 Y
  16.   el: '#app',0 q3 e- B$ t  {6 T& [
  17.   data: {
    % E$ ^% ~& u" g& p+ X, T$ q) v
  18.     url: 'http://www.cncml.com'1 ^- |  E' ?' ~" V
  19.   }
    ; h$ d1 |$ A6 h) D1 j
  20. })
    - p/ ?6 ?( v# y0 p
  21. new Vue({( ]+ `7 @! ^2 `3 A5 i+ @& M+ N
  22.   el: '#app2',
    6 ]: @7 H4 ]+ }. N' H
  23.   data: {
    5 o* ]2 C* E7 z
  24.     arr:[
    6 A# R+ Y: ~' W- F, t( g
  25.      {a:'bb'},/ T0 Y5 [; l/ [0 t$ m5 ~/ i
  26.      {a:'cc'}
    $ m( s. x1 ^7 g9 W
  27.     ]. ?6 r8 X# v0 ~% ?- f4 \
  28.   },- g6 d- T( y2 H, E, o: Q) a
  29.    methods:{+ W) A, u- I4 {/ Y
  30.     tap : function(){' g# b# W! Z+ |1 ~- o6 Q' J
  31.      this.arr.unshift({a:'new'})
    % l' x' i9 s6 u, U+ k: d( H! W
  32.     }3 d6 {5 c* m7 }* K& O* Q
  33.    }3 S0 L, R1 X3 y
  34. })
      O( Q, n  ?+ R
  35. </script>
复制代码
/ ?$ s  B2 y& m0 j/ [4 x" T

6 V# s, q* |, T5 X
在这里参数是监听的事件名。
" C! e) |# n$ k$ o7 I1 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:03 , Processed in 0.059873 second(s), 23 queries .

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