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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12460|回复: 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">
    $ P- `; F* P" R2 f# n
  2.   <p>{{ message }}</p>: J; X$ l8 T. r( R/ `
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    0 z; q) r7 E' z& C
  2.     <div v-html="message"></div># e9 g% ^% x5 n" A( p
  3. </div>
    . I2 B" q7 m5 w" ^
  4.     5 ]$ ~" n9 P( z
  5. <script>% q) B7 G% q: ?6 w# U8 b& ^
  6. new Vue({( T: }/ }0 J0 E& [
  7.   el: '#app',
    . G" w. _" Q6 y% {. A7 Z
  8.   data: {
    % o+ ^2 U5 x1 l6 N( {' ]& s2 N
  9.     message: '<h1>菜鸟教程</h1>'+ J" ~9 Q& H( m; }
  10.   }
    7 Q  G: g* z$ Y4 h4 L- d" }! V; c
  11. })2 p0 P; M5 q: K9 P: B
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    7 y/ B! I# H7 y' Z' _2 \- C# j$ c( l& \
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">4 h& Y7 J; W/ S' ?# i' n
  3.   <br><br>+ H" E" J7 W) f2 y, [' N3 N3 i9 ]
  4.   <div v-bind:class="{'class1': class1}">
    - s5 L$ m9 N  D
  5.     directiva v-bind:class
    2 t# ~- m. B! L! Z
  6.   </div>
    ; @) T: F2 _- ^8 X
  7. </div>2 J$ q4 t7 S1 r( }, l0 C: y! J
  8.     # u/ d2 h/ {- v8 n) c
  9. <script># l6 ~* _1 h) Z& N. W# y
  10. new Vue({
    ) l+ |  w7 Z$ z4 W
  11.     el: '#app',4 a$ ?5 U+ R) R, ^% S' h1 x
  12.   data:{7 j- }3 b( u: a5 k2 K
  13.       class1: false
    ) {# c/ r7 k1 ]6 j. L8 J
  14.   }
    ; ?  x3 w  |2 g. w1 D
  15. });2 p9 C4 y4 D7 P& z
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">6 ]) U, I/ E3 R! @
  2.     {{5+5}}<br>$ J6 W) G/ s1 a  r0 ]
  3.     {{ ok ? 'YES' : 'NO' }}<br>4 S1 C" _* V6 P4 ~* v" C0 O
  4.     {{ message.split('').reverse().join('') }}2 t/ E3 _2 E. f7 [. X
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>8 [# a7 {+ d$ f
  6. </div>
    ! ?. Y2 \# t+ A( g7 h
  7.    
      U: [; W& J/ Z+ k% c0 V& W
  8. <script>$ O" C8 L8 \3 i0 A0 s1 A/ |
  9. new Vue({
    6 i; U3 ~8 z2 q
  10.   el: '#app',
    6 N# ?4 s: N7 `6 v2 k% A
  11.   data: {& k6 H$ m- A0 R( w' j, R1 E
  12.     ok: true,
    $ U) O% X0 {, v' N/ m/ W  l
  13.     message: 'RUNOOB',
    # A% z" n5 b; W, A+ T" I
  14.     id : 13 ?; a3 A+ K0 f' H2 f
  15.   }8 m3 g( {0 c6 z( B# `1 b) m4 S$ p
  16. })9 w0 j/ y( e* p* |0 ^9 J( L  Z: j
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    ) |5 d- ~/ [$ A' e1 ~
  2.     <p v-if="seen">现在你看到我了</p>6 g! p% D% W" B& b! N( q
  3. </div>' {+ i# L! u7 J0 Z* H
  4.       B6 `" [, y1 k# T1 R; s& W& H5 K1 l
  5. <script>
    2 V8 M: w2 Y6 T# N/ H
  6. new Vue({& M8 C8 B  J- J  ?4 {* ]' J" l
  7.   el: '#app',3 v0 A0 L0 K6 y( W; J' N9 O
  8.   data: {
    5 C9 _* {$ i6 O. S
  9.     seen: true! w$ O1 D0 s7 |2 z% r4 _
  10.   }4 T1 J8 m5 I0 J- T+ D, u8 N- I& n; }
  11. })2 n1 b/ `4 s" x4 o- V
  12. </script>
复制代码

& I' L; k' w" o- r% o
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">% t  b) H5 X# U9 U5 A! {* t' t
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    : w! ^) J, ~$ }) y! H
  3. </div>
    * o' \' a6 Q" m1 S: R( w; q
  4.     0 E, A6 T- F! q6 U2 v4 [
  5. <script>
    8 v! J! K. @6 J0 C+ x7 G
  6. new Vue({
    " h8 P7 A( c% T. u7 F
  7.   el: '#app',; |' K7 I% [2 C7 C  ]7 d3 f
  8.   data: {. j+ W! H& r- q, N) g4 h* I  u1 w
  9.     url: 'http://www.runoob.com'
    8 b. W' e1 b* ]7 s; t
  10.   }
    , K; G$ S' B! D6 Q$ g
  11. })6 J  s) K" Y  Y0 Z3 A4 i* G
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
. E' P& ?/ Y2 }: P' ]5 p
  1. <div id="app">
    6 V, m3 I- P8 |8 C0 Z( E, U
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    ( Y& {# g5 a, X. X- m9 p: G0 z
  3. ! s2 F, a& L, b- X) y' \/ o
  4. </div>6 n6 [" W( z. j0 H9 i' S; Z" G2 T. u

  5. ; A8 Q0 P0 D4 |' ]7 s9 O
  6. <div id="app2">, M6 Q: x% j9 |* Q( Q
  7.    <p v-for="val in arr">
    : R/ m- j6 s! C9 m! x0 J
  8.     {{val.a}}
    3 j' c  ]" Z6 q) R- |
  9.    </p>! Q8 y! G( {! V' P& s
  10.    <a  v-on:click="tap">点我</a>
    0 y+ d1 v! S1 {4 C# Y! `; S
  11. </div>
    * A7 E) Z- M( M5 P( i4 u

  12. . J! G+ v! R$ V7 E7 [& t; V

  13. " }. U) `$ \; G! i/ c+ p
  14. <script>( E4 V" m9 D( E4 @9 T# x
  15. new Vue({( S3 f# K8 d. Z1 |
  16.   el: '#app',
    ; S/ o+ W. B& U" G6 G" l" d
  17.   data: {
    $ ~1 m; w5 U6 d% d+ E( {
  18.     url: 'http://www.cncml.com'
    2 _9 M, I$ k/ f* A9 J
  19.   }
    ! }& F: N, s3 z* c, Z/ w
  20. })
    6 ^* h4 u  `' j4 ]. z1 Q
  21. new Vue({
    ' E9 U/ |# c& z. j. e; J9 X7 e
  22.   el: '#app2',
    $ B/ f$ M7 x8 A* t: Q# A
  23.   data: {, O1 q" P. ^3 P+ M) g( g
  24.     arr:[
      c; _6 [8 ^0 n5 [, A
  25.      {a:'bb'},
    , `1 g+ Q% o8 M
  26.      {a:'cc'}8 P  Z& s# H$ \7 g
  27.     ]( Y8 ?6 D' A9 v+ I
  28.   },
    % c2 d' E: y- J2 @( u9 j; O
  29.    methods:{% }# {- x8 @8 {
  30.     tap : function(){
    1 ^5 j/ d5 q: p; I" T
  31.      this.arr.unshift({a:'new'})& g& Z( V" y4 x! F, w) j6 A
  32.     }
    , m+ \) H0 J( E4 f) u* I
  33.    }, N2 m* @" o# f; o5 K+ v6 d, j
  34. })
    3 \/ o% U/ a7 Y$ x
  35. </script>
复制代码
+ \0 `& d  n8 N8 ~# D' k- |

% I6 {; h+ G& Z: ]; v
在这里参数是监听的事件名。
* f  M+ B3 G3 k6 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:49 , Processed in 0.133898 second(s), 23 queries .

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