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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12461|回复: 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">
    ' f2 H! F) Z4 L7 u
  2.   <p>{{ message }}</p>
    % `5 [, k& m5 a# `
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    8 I3 H0 t- t" z# A& r. B, c( C
  2.     <div v-html="message"></div>! @" ]' |" y7 g0 v
  3. </div>
    % O) X5 X  s7 J. A, L0 I
  4.    
    6 g$ A/ w  ?& a. g5 W' {
  5. <script>
    # V& Q4 V+ |" e( M8 S. Y0 d2 N" L
  6. new Vue({
    + G2 g8 i2 W1 M2 @
  7.   el: '#app',4 l  j8 t. L( r
  8.   data: {! ^. _5 F0 j5 M; _& o
  9.     message: '<h1>菜鸟教程</h1>'
    7 H, S& u9 V9 D: E
  10.   }  ?0 A. }/ C3 U4 r( L" D# D
  11. })
    " S8 E, z! o. Q- o8 g8 r, m
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    1 L- B% {! v, e* D
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    6 U+ h: d* ^' E" V& P0 E2 w
  3.   <br><br>
    # w1 l/ ?! L, g$ `
  4.   <div v-bind:class="{'class1': class1}">
    # W1 S8 ?% P# |& q. s! \
  5.     directiva v-bind:class
    % {* K$ ?9 m6 M' z9 i. K( ?
  6.   </div>
    7 J, j! T) a* V
  7. </div>
    4 ]$ t  Z' y5 R9 L% W6 x
  8.     " m; P1 V* w  R( ?* Y$ Y
  9. <script>
    ) S* z% j2 J+ n, h+ g
  10. new Vue({
    # ?) O; G6 L6 p. M- b, w6 F0 @
  11.     el: '#app',' a" }8 k' q/ x( r
  12.   data:{' Y4 X7 a" y5 B3 A1 _! A
  13.       class1: false0 X0 y3 }8 }# x  m0 N" v2 j/ B: l
  14.   }. e2 L5 d6 I. |  \; F8 U% V
  15. });
    8 {' q1 ?! q* e9 B  U/ U" Y' e8 w/ J
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">$ u4 C: w4 \) z( @) l9 ^
  2.     {{5+5}}<br>% D+ g# l* s1 G) v  [- j
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    5 |7 Z4 G; h% Z& b& h
  4.     {{ message.split('').reverse().join('') }}- K/ f0 {! J5 _; Z4 T" v
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
      T# B0 c, p+ Q) c# b
  6. </div>
      {4 V8 }* q( _
  7.     # U! [" M5 k/ h# [! l$ [
  8. <script>" q+ N2 S5 _" _5 q, f+ H9 w
  9. new Vue({
    9 `" V9 v8 b4 d2 B) |6 k& V
  10.   el: '#app',
    / L" O- x( a0 |
  11.   data: {
    , U9 j6 O( r& f1 r, n5 c
  12.     ok: true,! |( u5 z1 k7 W4 x+ Y
  13.     message: 'RUNOOB',
    / f7 ^' R+ r" c# v; F8 p
  14.     id : 13 ]; w6 [" z' q! o
  15.   }
    ! S$ S1 j4 B* d. ]
  16. })  [6 N( r$ @/ e! C2 p
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">/ ?8 I' y. L/ K& d, W
  2.     <p v-if="seen">现在你看到我了</p>% r- [! C2 C9 I$ V+ U+ J
  3. </div>
      x' p6 E& k9 g9 u+ i
  4.    
    1 F" a8 r& X! a& K
  5. <script>
    7 R+ Q1 v& y  B5 _
  6. new Vue({1 }5 y- w- S. T! o- Q) N
  7.   el: '#app',
    : c3 T' A, H# T; D
  8.   data: {  Z. T5 h/ c5 I
  9.     seen: true
    9 N  ^) h2 v2 U' d; D8 a; v
  10.   }8 m( M. E0 B* R" h. ], w% M
  11. })% J* e$ ?" Y7 _+ A3 b
  12. </script>
复制代码

4 o! V  V9 |' H$ N0 [1 j
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    8 T: J' C6 J% x- f! Z
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>) ^) M8 Q) J) N# c: q
  3. </div>9 j6 @5 Y* O0 I0 J& D, N, V
  4.    
      Q% X" ~9 x/ M+ g* I
  5. <script>( u, ~' \2 i; t* C) {6 ]
  6. new Vue({, g! N4 a$ K2 [5 P: J$ a
  7.   el: '#app',$ Z* o' n% g# v6 n, v8 }* ]
  8.   data: {
    ( m) X4 l' [8 F: P
  9.     url: 'http://www.runoob.com'# o" e3 W0 d" j5 {7 {) V
  10.   }
    ) P5 _" k# u* H2 T% l8 O
  11. })( f" w/ E$ P# O. ]
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
  O; Z* R8 U  f; \5 A
  1. <div id="app">
    & @7 f& v" \/ o
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    * s2 X& h6 O6 W0 q

  3. 5 y5 F% C8 w) ~" x0 \' P) x" J4 r
  4. </div>& m/ E% V' N( L6 p; P. j  a2 M
  5. * @0 n3 P! L( N! j& _
  6. <div id="app2">) C; P, M! I, D6 S8 V, o, m
  7.    <p v-for="val in arr">
    ! x1 G+ R( ]- n; Y( t: M+ z
  8.     {{val.a}}
    9 M6 w& s% P  V+ l, P( Z( `
  9.    </p>
    3 R9 M5 \! r9 f/ W* o
  10.    <a  v-on:click="tap">点我</a>3 C  S4 l, f0 [6 @+ h
  11. </div>
    - v+ ]) `* W+ y5 i: p1 q  @

  12. , T; M* \% `: H" E$ [
  13. + a4 F9 c6 S: O. t9 {
  14. <script>
    6 H5 O% |3 T" P
  15. new Vue({1 A, B$ z/ O$ n0 N' D
  16.   el: '#app',) ?$ |# y6 b2 v" s4 A: Q. f. F
  17.   data: {
    ; A. @3 v' D4 e4 ]
  18.     url: 'http://www.cncml.com'0 r2 h# H# o, s  J
  19.   }
    3 K+ Y0 r, ^+ J
  20. })( q& x% O, s/ [
  21. new Vue({' J3 P$ {4 e* P! @) B
  22.   el: '#app2',% m3 e) h+ ^& o0 N+ d# N+ P
  23.   data: {
    1 ?/ M& a% D2 f' x5 u
  24.     arr:[+ K$ t1 p8 b+ x# A% v
  25.      {a:'bb'},
    ; f  u8 ?1 G( F, ~4 K; E
  26.      {a:'cc'}( f4 ^: w" C) c* L# w# _
  27.     ]: e, P5 m$ Q% Y0 t
  28.   },5 T% k1 _4 v  o4 ?# L! S% P2 ^& [1 a
  29.    methods:{# B# Q0 D( h! X* S$ f  Y8 {
  30.     tap : function(){
    : s# l4 @9 D4 A  }/ v6 I( q7 S
  31.      this.arr.unshift({a:'new'})
    5 C$ L, h% i; _+ Y
  32.     }
    / t$ y. t5 Z- X  y7 X; |% e% L
  33.    }
    ; U6 f/ s/ U6 P- q8 k' m
  34. })
      J2 B% F- l; H0 J: x+ Z
  35. </script>
复制代码

" J4 J- r* q% I

$ H5 f% E; B; L8 q7 Y
在这里参数是监听的事件名。

0 ]/ a& v. ]8 z2 F0 a! W) ?" y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 15:58 , Processed in 0.127616 second(s), 22 queries .

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