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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12450|回复: 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">" x) s: o6 j+ @0 `
  2.   <p>{{ message }}</p>
    $ ?! j+ b/ D/ O: Z
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">  a$ w; V! _1 ]" v$ o, y
  2.     <div v-html="message"></div>5 F" j1 k! m' k/ D$ ]5 H
  3. </div>- |1 R  N7 o; B! W8 u: U6 Q
  4.     0 [9 b9 T! W7 @4 W/ X
  5. <script>
    4 X+ z! e# W% y; `- H/ U0 q; \; S% o
  6. new Vue({: l' L/ W. C0 @6 E' t) |1 `
  7.   el: '#app',7 ]- B" K! q1 N5 X" O8 }
  8.   data: {) X, F: Z9 ^. F: p% z
  9.     message: '<h1>菜鸟教程</h1>'
    8 S+ R5 l, z# \+ z& G
  10.   }
    % T) f! y* h3 I8 z3 n
  11. })
    $ \6 `! t  R  C
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">" ^! f# T9 u0 {) f. @9 f& Z% K
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    $ F' W1 R1 T/ s% \; T! W/ O  w
  3.   <br><br>% p6 [' X$ T/ w
  4.   <div v-bind:class="{'class1': class1}">3 ~/ X, f# I+ X0 t7 r' V1 C
  5.     directiva v-bind:class
    & d/ D  n$ T7 d  k0 U7 X
  6.   </div>
    - b; @" I1 I! N, f* G
  7. </div>
    : {3 K. p  i1 K9 I
  8.     $ e# j+ C7 r0 g/ t/ X3 }
  9. <script>' Z) L! C" T# [
  10. new Vue({
    $ b/ o! b4 M. F+ M1 a8 R
  11.     el: '#app',# ?  C5 w9 e+ P7 D0 l
  12.   data:{8 R8 S1 d& E, S3 H
  13.       class1: false) q) h% y4 }2 f- ]: [* d
  14.   }
    ' M4 I$ W. U2 N) n' s  ~: ]! D  ^
  15. });
      y7 D; ~4 s( x% T* M9 O
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    % ~% o/ I3 ^8 w* ^6 E' R( T
  2.     {{5+5}}<br>
    / R: }" F: u; \/ ^" v4 l0 A  s
  3.     {{ ok ? 'YES' : 'NO' }}<br>7 C& e5 u, T- x5 ~3 Q. I3 H- I
  4.     {{ message.split('').reverse().join('') }}
    3 Y: ~+ h6 S& p' r7 p2 Z
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    * ]3 q& j$ o8 n3 x' `' h
  6. </div>
    - \% C2 u, Y! A! \; H
  7.    
    ) O4 e0 q. m& S$ }
  8. <script># c7 @  x- ^8 B8 H
  9. new Vue({5 f0 u$ x# M& O, t
  10.   el: '#app',% u9 ]) u- {- H9 }- a" E$ x
  11.   data: {
    $ D" U" }2 p8 z" g8 X1 u! w+ ]" a
  12.     ok: true,
    : [5 P7 ]+ r; S9 A4 z1 }) a
  13.     message: 'RUNOOB',2 V% R& ?6 P4 a0 P0 ?
  14.     id : 1
    : |: T5 w& Q7 h" [7 n% f6 X
  15.   }
    * ~' c* h1 N5 S, W& h
  16. })
    . r. @' @8 T3 h3 J0 w6 D6 |
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    ( e" q1 z. f/ D% N+ r
  2.     <p v-if="seen">现在你看到我了</p>
    0 r9 u/ D2 y; p* S8 v
  3. </div>
    8 z3 s$ c0 d7 d# V" w
  4.     6 j: J; T& d# k! s! J# ^2 u& H
  5. <script>
    8 T8 ?9 d- M! I4 Z# I7 `: `
  6. new Vue({
    , p2 A8 l$ p9 Z: v) c
  7.   el: '#app',' s# o$ [4 b; N
  8.   data: {3 W* H5 {% g' C- `* v; [: p
  9.     seen: true8 ~3 A# S3 j& A6 `6 r9 ^
  10.   }
    2 o  J, C" M0 Y
  11. })+ V, v% h0 ~! I0 J
  12. </script>
复制代码
  I' c& e% a6 x
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    ' P2 f. T/ W! ^( E7 Q" C6 }  S! M# v& k
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    " I" q: Y9 }  g( B& B% R
  3. </div>/ A- |5 p  |2 v# R; g
  4.     " F: C* ^3 {9 i- W- a
  5. <script>" U3 j4 V% _* ~- A: Z! h9 K! K* z( V( ~
  6. new Vue({9 k' s" y, b# {+ f" I. K" _
  7.   el: '#app',
    # M9 |) e7 ^' l: S- j$ _
  8.   data: {: {: |1 `6 T+ G- N1 |  D9 |" G: ^
  9.     url: 'http://www.runoob.com'  B5 b& w9 ~6 f4 g4 T
  10.   }% t$ D6 n' I0 {' |; @, q9 ?  a
  11. })  D( Q' h* g: W* s& `4 {( Q- G
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
7 f9 j3 r5 ~7 U6 ?% |+ U
  1. <div id="app">
    % \. b9 `# {! L0 \2 h0 @( w
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>! D2 j% r7 O, l7 K$ p; }$ o
  3. - V2 I1 O7 X& Y, L( ?( S
  4. </div>
    ' D1 }+ o, u/ O; {3 \. G8 M

  5. 9 C& ^- H5 d/ s+ _0 E4 p
  6. <div id="app2">
    - s) X! x8 I" l0 _! `% _) u
  7.    <p v-for="val in arr">
    6 q2 N) M" d$ m: Q( R) h# Q. U' u
  8.     {{val.a}}
    & G! E7 k( o6 `+ z4 l1 @
  9.    </p>
    / _0 T7 D; e  x" I8 P8 x( _6 @
  10.    <a  v-on:click="tap">点我</a>% t, k; N! L) s5 h2 {* i$ o/ Z
  11. </div>* F4 c- ^* S6 G! r- ]
  12. ' Z/ q6 {4 O( s4 W  p7 o+ o
  13. % S, W' ^* A8 I$ @1 j2 _2 u, t
  14. <script>2 A0 I3 h* a2 B8 }. C
  15. new Vue({% z9 z: ]5 T9 Q0 ~) W+ s5 f
  16.   el: '#app',
    - g6 s3 j/ m6 V$ ]+ Q  b  {
  17.   data: {8 R( h( D4 K: f0 r; t; ?
  18.     url: 'http://www.cncml.com'
    . j/ W' L2 c: d
  19.   }6 S7 O. X# b( Z7 L9 \' l0 {3 ^6 Q( F
  20. })
    - G0 t( _( ~3 n$ A6 K5 W
  21. new Vue({' o7 ?& Y2 e& I7 H7 r/ S
  22.   el: '#app2',+ ~' e9 o( ?/ p* ]
  23.   data: {
    4 b; m6 v# \& m
  24.     arr:[) S6 ~2 f" C: W) R. B
  25.      {a:'bb'},# {' M; P1 v5 T7 f, Q( U; c
  26.      {a:'cc'}
    9 f7 d! j: L- x, S% k/ w
  27.     ]
    - j' Y! p* h* `4 h- ]4 z
  28.   },7 k. z' K/ X2 V- y, Q% g: j/ J
  29.    methods:{
    $ U0 \& a* h2 m2 @5 ?
  30.     tap : function(){
    ; ?- W! _1 {5 L& q: g: E% M
  31.      this.arr.unshift({a:'new'})
    ! R0 }! [! n, F5 g3 ^
  32.     }
    ) @) J$ S! J6 I8 a% E( {; e0 c# A1 G
  33.    }# h9 @& {, K- S4 V
  34. })' _% p5 k6 X3 x- u! n
  35. </script>
复制代码

$ `7 w6 t- }+ a0 o8 [/ r

% O* a6 n: }: q3 |4 s( x
在这里参数是监听的事件名。
$ ^+ F6 [7 C' w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 12:11 , Processed in 0.151478 second(s), 22 queries .

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