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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15010|回复: 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">
    0 p$ W, d$ S$ d
  2.   <p>{{ message }}</p>
    * t/ k; B  f6 m0 F+ s
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">5 k( k; x( h, N& H! W1 [5 T% M4 Q
  2.     <div v-html="message"></div>/ L* u+ P  ?. L4 X1 h$ n' t7 v
  3. </div>5 h8 i3 e6 h7 a. a2 u
  4.     # y; F0 p5 C& g3 V+ H2 l, Z
  5. <script>
    ! l) [' i3 B7 y6 \' w* h) K
  6. new Vue({
    & m2 m2 h7 `( S8 c
  7.   el: '#app',
    & [* a" k" `# T5 A% j: m6 q1 a
  8.   data: {7 |6 ]3 W' l6 B& W
  9.     message: '<h1>菜鸟教程</h1>'- Y+ E/ l: V/ s, {9 ]4 k+ P
  10.   }1 d2 p0 a" K7 D4 m1 r
  11. })
    7 t9 J- j& ?( P' @* i
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    6 E+ F# x& n7 C% ^0 G
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">) e+ }, j" U6 l2 C
  3.   <br><br>
    3 y; s* E8 M  R$ O# @6 u: y
  4.   <div v-bind:class="{'class1': class1}">- ?; g& ?% G' c4 u0 e/ e; V* e
  5.     directiva v-bind:class
    % j/ o% D8 R% N
  6.   </div>2 ?! c! [6 q% \, @: i, b- n
  7. </div>
    7 f/ N# ]4 Z% j0 t8 j/ j9 o) t/ C
  8.     ( B* Z/ A6 [- |+ y$ [
  9. <script>
    8 p9 }  E$ [1 f3 P
  10. new Vue({% o" Q. ?' H1 R  M( m7 K3 E
  11.     el: '#app',
    7 }: Z7 z; [* Y3 ]" {: @9 n) r  L$ o
  12.   data:{
      i3 }# c: l$ b7 X8 t0 Q; o
  13.       class1: false; H5 N3 q) M1 Y* i2 ~( i6 l
  14.   }
    & H( x+ d. G0 P" [6 `8 B! r
  15. });& I& e6 A8 X. U0 n2 O) c' g7 M
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    2 L, c# j' I% ?. L# m
  2.     {{5+5}}<br>
    # S6 p" {( D6 N- i3 M
  3.     {{ ok ? 'YES' : 'NO' }}<br>: H( v8 G* d+ Z  U1 O6 b
  4.     {{ message.split('').reverse().join('') }}
    - }' u( \, A' z1 S, h. X
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    / n4 L' n, u' d9 A# b
  6. </div>" t+ ]5 B$ w/ `* b7 M
  7.    
    " q+ _+ e+ _. j  O4 s; p" ^6 Y& g* m0 r* ]3 `
  8. <script>: D0 o, T( v. u  j% S  r
  9. new Vue({
    4 c$ z6 t4 Q  b" w7 h6 Z2 A
  10.   el: '#app',
    . \: a: W$ m! t6 u, t
  11.   data: {6 `& n9 x/ M7 J! k
  12.     ok: true,+ z8 G) G6 p: D1 d
  13.     message: 'RUNOOB',
    : c: |% _8 K; c  a7 \
  14.     id : 1, I- H* }" B4 s
  15.   }
    2 C3 |( U- e6 b. T6 y4 |
  16. })3 m) `  ]1 t4 C# `
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">9 s. F7 G5 o8 v  U# g9 _6 j
  2.     <p v-if="seen">现在你看到我了</p>0 x8 A5 i. r2 e1 B( j- S
  3. </div>! D7 J0 y3 m3 h
  4.     1 f( S$ N9 x% M6 E- h8 s$ k
  5. <script>
    3 n2 n" t4 b  f* I
  6. new Vue({
    4 U8 S' x4 b$ j0 l
  7.   el: '#app',7 E) a' O2 O8 e" F7 J0 K2 o
  8.   data: {
    ' A8 R0 B. _: H% E8 ~% U& y3 K
  9.     seen: true
    ( p. A- z" q4 w& `: z
  10.   }
    ) o# }3 I+ }/ Z5 A& B
  11. })& Y2 a6 W1 v) C8 _; o
  12. </script>
复制代码
3 S; d! Q" F6 Q) N1 L+ \7 I2 k$ C
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    / v( k0 F2 v+ `) d7 t5 e
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    ; c! [' ~" _' }  }
  3. </div>
    0 l4 ]% x* u7 {
  4.     ! Z" R8 O& Z6 m4 [. O* R1 k
  5. <script>
    6 z3 ^5 d' g0 H+ l5 W
  6. new Vue({5 F7 r% z! @  [
  7.   el: '#app',
    * x8 B3 I+ t, U. h$ e
  8.   data: {) ~2 O+ h" t/ l/ `( P# e
  9.     url: 'http://www.runoob.com'
    + m2 r) y, }4 w% @# d, Y
  10.   }4 S5 ~; t. q" i2 S* Q
  11. })
    ! d* i* U% F+ G
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

" E2 f) E. q3 e2 t+ X0 x
  1. <div id="app">
    4 I+ Z! o) |) `* D3 h( ?6 D
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    ' Y3 X/ v% G$ D- ]3 z/ S

  3. $ e  ?9 t$ K" x. h( Q
  4. </div>9 `  T( v3 j" Z/ Z
  5. - `* B7 B. }) w* l  Z+ S& h
  6. <div id="app2">: B& p% v6 a5 X2 F' ]
  7.    <p v-for="val in arr">
    ' {7 K$ T; N' n/ k) u
  8.     {{val.a}}
    0 j; ~3 X, k  u' b. B
  9.    </p>
    $ h0 Y$ v: ?5 t& z* A- {. \
  10.    <a  v-on:click="tap">点我</a>8 S7 H( e( c+ C' S& d
  11. </div>
    ! P! Q% k2 D- w% i2 k
  12. & K9 l9 m! _5 z. a* A* w

  13. 1 A; O# h( ^, v& L' K  f. B- `' f
  14. <script>& Q0 g( t. `6 |( L9 S" Y+ c/ d/ }
  15. new Vue({; F: B4 c* H9 ]6 A  e( ~0 C
  16.   el: '#app',
    ( Q7 h4 n# b% Q2 d
  17.   data: {
    0 H. G8 I0 h( j5 D( M% f
  18.     url: 'http://www.cncml.com'* q* z! E7 C, N$ t. A% Z, P
  19.   }% x8 C' M: e7 S  T4 s3 \* B
  20. })0 ^' E" w6 r& ?4 {% r0 A
  21. new Vue({, o( w+ ~  I; M8 z" b7 a
  22.   el: '#app2',: X8 O! C+ F% }  a' T5 ^
  23.   data: {% Y" r, k& A0 b1 c
  24.     arr:[
    3 g9 L( t8 s$ A4 Z: O3 A3 J1 G
  25.      {a:'bb'},
    # }- m5 u" Z# n- A6 W" O  {
  26.      {a:'cc'}
      R0 x( S; \4 `" ?0 ~
  27.     ]- j+ A; F. @) `7 \8 }
  28.   },
    ( n( f9 P; l! H% O
  29.    methods:{
    0 l% S; D. U. g0 s: c% A
  30.     tap : function(){) G: q0 r0 x/ |7 u. P6 ~
  31.      this.arr.unshift({a:'new'})! }0 ]% D9 g# s- h: F% n
  32.     }
    8 B7 E  B- H) ^! U
  33.    }
    , J  \! m3 ^' v  [" s
  34. })
    + g4 G, f& f* B' Q- v" ?' [
  35. </script>
复制代码
: a& |0 k) ?) W& K
$ O0 e% d# f$ p# l! {+ F: o! z0 s
在这里参数是监听的事件名。
  ?, o% X3 C+ B  W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:10 , Processed in 0.058021 second(s), 22 queries .

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