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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15767|回复: 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">
    ) u. j6 \" B4 Q! z) H  d: X  ^
  2.   <p>{{ message }}</p>
    ( |8 T8 z) t' w6 G; U
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    0 k5 N! ~# r7 y
  2.     <div v-html="message"></div>! m( C# A* g6 C; h
  3. </div>* C0 `' p, L" i& J9 |/ l- g
  4.    
    $ {( t5 [# f; a& u5 O# Z
  5. <script>
    / [1 j- I1 {0 f# x$ x
  6. new Vue({
    ! j1 j) l% v5 j) B1 U- h- J. s4 d
  7.   el: '#app',$ ?# R" F7 o) V4 T
  8.   data: {" l  x# {% p, ?! m9 |5 Z+ V# l
  9.     message: '<h1>菜鸟教程</h1>'  ?: P) {1 |' d3 O
  10.   }
    ' I& w6 Y9 Y. x, Z* B
  11. })
    + r) G- s. f2 d$ j
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    0 b3 t4 L& t$ E* T
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">* S2 G% |2 k* w; \5 X, E
  3.   <br><br>6 J9 N% X( ^2 ]
  4.   <div v-bind:class="{'class1': class1}">
    ( O+ a1 p% N5 q5 e
  5.     directiva v-bind:class! e5 w  T1 E% ~9 c8 R
  6.   </div>
      r1 e; H- H& F
  7. </div>
    ; k7 z+ ^! f. h9 M% o, Y/ d
  8.     , r% G* k9 @; @% \! E
  9. <script>
    5 y& Y9 n  \- G, ?
  10. new Vue({
    & c. R8 \& n- v8 ?. I/ ?
  11.     el: '#app',( }- u, w+ |9 c" j. A6 Z
  12.   data:{
    0 i3 H& m% M; h$ m$ n
  13.       class1: false
    6 k2 J' a* g. P
  14.   }1 X! T5 v6 D# V( Z+ P2 k
  15. });
    9 Q+ K* J8 O' c; \4 j/ Q+ F
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
      `8 n. t3 U1 z# q7 Q" G
  2.     {{5+5}}<br>/ L+ `4 O1 V# s2 f
  3.     {{ ok ? 'YES' : 'NO' }}<br>6 H4 B) U/ z3 q* |4 n
  4.     {{ message.split('').reverse().join('') }}
    ) ]7 E. \( ^' n4 y0 a
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>: m1 U$ m" @) g
  6. </div>' n1 a* |' _9 G6 {( d: p
  7.     / i% t, t$ b( }: U' s8 ?
  8. <script>
    . Q3 V8 n) Z* K8 m# t/ q
  9. new Vue({1 E" v5 G" C) X7 W
  10.   el: '#app',
    " e! B$ @& x. M% o4 L9 Z; z, h4 ^
  11.   data: {
    4 y! _* t1 o" w! Y% m9 h. n% v
  12.     ok: true,) r; Y. Y8 K4 P9 Y
  13.     message: 'RUNOOB',, F$ M6 ], ?; G! h4 E
  14.     id : 1; V& T  q/ K  @) I, C
  15.   }4 U5 ?* X6 N! N0 @9 |
  16. })
    3 ?; i. k  f( c$ u
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">3 k( o# `: |* \4 P! C
  2.     <p v-if="seen">现在你看到我了</p>
    0 s- w! \9 R* n" V3 `; {
  3. </div>
    " K5 F% E- g' l9 d
  4.    
    ' j3 v: a4 p5 S& u* M3 ?
  5. <script>
    8 h# O+ ^1 ?, @+ {$ O" c
  6. new Vue({5 x: |* D- l( D& ?% z$ N
  7.   el: '#app',
    " ?8 Z6 M$ ~/ n7 X* w* ~  w
  8.   data: {" d, u! t* I. r) V, T4 j; V
  9.     seen: true
    # a. T4 k$ C* f
  10.   }; J' v+ }- t: @# f5 [
  11. })1 R; C" Q  _( B  \: u2 h1 x4 h
  12. </script>
复制代码
% r: {& q5 `( ?& t" T
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    ! Z( s9 i/ Q4 Y3 F; Y  x# H
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>) M5 O/ x  t; J9 ~
  3. </div>3 x- e9 F# J/ O2 I
  4.    
    4 r  M4 n! v- M' C* j
  5. <script>, G2 D. M' b2 s8 W3 s" j2 n4 E
  6. new Vue({
    % z1 N; y3 A$ N
  7.   el: '#app',7 R  E6 n/ I/ I% u, _1 l
  8.   data: {. R: @1 S: @( K
  9.     url: 'http://www.runoob.com': m" n# g: t6 ^2 U0 X
  10.   }
    $ x  A6 x) u8 N' o/ V- p  x+ L# I
  11. })
    4 W+ h1 Z2 Q* q
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
  Y' M* ?" [- O/ i/ G' t) R& E
  1. <div id="app">
    ' `. N/ u; x+ n. S$ G
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    4 \/ V+ c0 e* U% S1 C8 Z' m8 Y
  3. / D2 E' _8 i4 [
  4. </div>* ], R2 p* t7 c

  5. % B( @" [. X3 D# {  ^& d
  6. <div id="app2">
    ' c3 ]5 U; k6 B8 x0 J
  7.    <p v-for="val in arr">
    7 }- p' Q5 Z$ x
  8.     {{val.a}}
    , B5 g$ t" ]+ s* A
  9.    </p>% \" B% E- l  z9 |# v) @$ P  Z
  10.    <a  v-on:click="tap">点我</a>3 p/ l  r; f7 i- o+ O- W
  11. </div>
      s3 z' _5 x5 P; L' N3 \5 a
  12. . k9 ~# Q' L. g% E/ n
  13. : h7 J) M1 ~6 Y5 ]0 V2 v
  14. <script>% S- Y1 r+ |/ d5 e
  15. new Vue({5 o3 b# \& @: H
  16.   el: '#app',) j' [5 z8 i7 D* V" o( S
  17.   data: {
    6 Q) G8 e, G2 u' Q2 y5 K) |
  18.     url: 'http://www.cncml.com'
    - y. R$ M: u" A* p+ B7 j( u
  19.   }
    ! |8 J* v: I  M8 o
  20. })
    ) O' ~% \0 [6 n/ Q% B$ i4 D% T
  21. new Vue({
    ; H/ S% d7 w& T' Y5 r- j+ m2 ^: d
  22.   el: '#app2',7 p# \& c3 {; T% P4 ?. {: v
  23.   data: {
    + U1 Y3 S$ S# S, h$ q
  24.     arr:[& V  Y; @. A, @5 |3 s' w+ h+ d
  25.      {a:'bb'},
    ; |$ t( }: m. j: S+ X. w& b
  26.      {a:'cc'}$ H( I% L' y( A! |. s7 }
  27.     ]
    3 c5 _' q; H7 Y) v
  28.   },4 K2 n! }$ C7 w4 V, F3 ~4 l
  29.    methods:{0 m* W/ @" N6 p
  30.     tap : function(){
    7 L- r( N, W% e" \
  31.      this.arr.unshift({a:'new'})
    : n2 Y9 v! u; z( t* y
  32.     }4 C: ]; j7 G- F4 S
  33.    }) m/ f2 A5 |/ x' |0 [6 u1 q
  34. })
    ) X5 @1 Z4 q9 U9 L/ u
  35. </script>
复制代码
. M6 w6 u- K9 ?. M5 K, i6 J1 r/ Z

( r! Q6 F  l. u7 Q  I6 }2 k4 L8 N
在这里参数是监听的事件名。
+ x, B" V. `; H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-7-19 15:49 , Processed in 0.081572 second(s), 22 queries .

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