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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10808|回复: 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">
    4 p; j4 y$ @0 W) j3 ^8 Q8 ^( u
  2.   <p>{{ message }}</p>
    ( n3 @6 X1 b0 R3 e4 B+ O& X( o: N3 V
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    " h1 A7 M1 P( W# Q% d& b
  2.     <div v-html="message"></div>2 e! x- `5 H2 T9 z  W. e# w
  3. </div>0 n9 c* @$ v" l1 w1 m8 U$ W$ v
  4.    
    4 @* p" |6 Q) J' {+ O4 j
  5. <script>
    , X' N' p8 E! A+ P: T
  6. new Vue({
    . i  v/ w- ?2 k$ O' R, |
  7.   el: '#app',' X3 S# X5 A  J" n
  8.   data: {
    8 \7 q4 g# c2 x3 K; `) P- p
  9.     message: '<h1>菜鸟教程</h1>'; }, L6 y: ]7 J* B( \8 E
  10.   }
    5 w: m: _0 ~$ G) m
  11. })1 v4 ~# }, q  z3 D% }
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    ! B1 J+ ]- L8 K' m% ^
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">! g( B1 Z$ d" f0 |# c
  3.   <br><br>" h" l6 C6 U7 t3 F6 E% d, V" j, Q
  4.   <div v-bind:class="{'class1': class1}">
    + I+ o7 o5 l1 p; E6 q1 ~1 r
  5.     directiva v-bind:class
    / T" l- O$ X# d
  6.   </div>- p0 x# \% u% Y6 s3 f
  7. </div>
    ; D8 k( ?8 K" ?! S! ~/ F& X& n
  8.     " u) X& r: O" I. o+ B9 a, q
  9. <script>
    8 P% |) ]. F9 d1 ]" Q
  10. new Vue({8 l# J: Q$ j" P8 Y6 n. F! I) ~+ x
  11.     el: '#app',/ x! k4 Z( K5 Y+ E% H+ m
  12.   data:{
    ! o! l* g  f! x) P; U7 Z( |
  13.       class1: false* U8 f- w  p1 P  u9 ^
  14.   }
    ; N' k  t$ ~6 @; U7 S2 e3 m
  15. });% q  s7 O: ^* o& i1 @
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    9 D4 o! u5 |8 x9 O# X) L
  2.     {{5+5}}<br>
    - e8 E) s  c' f, ?& [5 ]1 G
  3.     {{ ok ? 'YES' : 'NO' }}<br>. |2 s2 t* O* N$ r& v. q. X
  4.     {{ message.split('').reverse().join('') }}
    4 N# N; ~2 E& N1 d; i2 y( z& a
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    7 K& ]. I' x9 v" `4 b
  6. </div>" p8 h" q1 q: A
  7.    
    6 l" K7 z3 h5 D6 r
  8. <script>6 n% n# }# q' v$ }7 @
  9. new Vue({. i5 z$ Y, g7 ?" i1 d: Q; T
  10.   el: '#app',
    + M7 f; \# h& P: V: s; m1 j
  11.   data: {
    / W% `6 N. U  a2 G: o1 u
  12.     ok: true," m4 ^) }) ~! t' ^; G# N
  13.     message: 'RUNOOB',% d4 ^) x7 x; }4 J, y
  14.     id : 1
    8 T, T) [" A9 d% [# s( p* m
  15.   }7 @3 q. Y7 p) j9 M2 u. _( X* ]6 m
  16. })
    + j$ N# n6 ]8 x5 a$ x
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">4 c  A" t" M+ M7 y  v
  2.     <p v-if="seen">现在你看到我了</p># M/ F0 t0 @, j7 y1 Z7 |4 Y
  3. </div>
    " a: k; u( b2 @2 ^
  4.     ( R; U  Z( a7 [* b0 I4 j# `
  5. <script>( \2 v9 W$ c! T, _9 m
  6. new Vue({
    ) q" P. I: T: A; t  p; S
  7.   el: '#app',
    ' c! Q/ X# a2 F2 y- M- W
  8.   data: {3 l( O# C  k4 {* {
  9.     seen: true
    ! W" Y! b* f6 v2 _/ \: u' d* `
  10.   }
    " X: E5 V) S% b9 O; t
  11. }), D2 e6 x/ T3 q( I4 }5 P  z+ l
  12. </script>
复制代码
$ \+ y& G1 n0 N  J
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    9 Z/ R; H2 L$ i4 x" |" O
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    " m& j. n. K6 e3 a. Z
  3. </div>0 a& `% M0 K3 I- C
  4.    
    " D) t( Y3 g" a) ^, V& Z/ Y. S
  5. <script>
    $ c3 b$ S/ v/ ]: H) M4 |
  6. new Vue({& {$ n( {, ?9 `
  7.   el: '#app',# \3 b* \) a8 i2 k% c5 e7 [2 s
  8.   data: {
    4 w; R8 U4 c- }: b. r
  9.     url: 'http://www.runoob.com'  u6 c2 V' @$ y$ {( T
  10.   }
    + M; R1 n+ R; P: t$ T2 J# R' t
  11. })
    # T# C( F. h+ ?* h& n" j
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

% n1 l9 X$ y, U- f2 [+ b
  1. <div id="app">: p  J- X" g$ t+ a# g& v
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>. \. x# O: i3 F8 H1 H4 P5 K2 D

  3. 9 O: [( p  c( R  o( z
  4. </div>
    & h' R4 k, q' K% M

  5. ' B2 K/ R; A/ i# Q
  6. <div id="app2">1 F5 k' x* D. B4 A, C1 l9 V  g1 }9 `
  7.    <p v-for="val in arr">
    + b  q7 [2 `3 y1 E2 \
  8.     {{val.a}}
    * Y. U% a6 }! ?: ^4 G* }$ I
  9.    </p>
    ' \2 P. r1 q6 Q6 f8 ]* A% o- |
  10.    <a  v-on:click="tap">点我</a>
    3 R" }6 p) ^, k3 F1 P
  11. </div>
    : \0 W. y" i1 P; |- n
  12. 7 b, g6 A, i1 \1 h
  13. + P+ |% W1 A+ a% O- H5 x" ~2 h
  14. <script>- z- G0 U( b* O$ o
  15. new Vue({. i  X; _+ r/ w4 ^9 V
  16.   el: '#app',% w+ H0 {) T# a
  17.   data: {
    " V* a( u% ?- `* l2 ~
  18.     url: 'http://www.cncml.com'( k6 u3 t7 o& N$ f* J0 ?6 V/ A
  19.   }
    * }2 X. _' b- S  {& K; R3 k
  20. })/ c2 c5 b. z6 v! W0 B  X
  21. new Vue({
    + X; x) @2 O; o$ s
  22.   el: '#app2',( b+ F( Y3 g, z3 \3 A& R7 N/ a5 E
  23.   data: {
    " S0 d* l, \7 M: m, R; U; A; J
  24.     arr:[
    9 s/ w9 {8 B' M! |( a
  25.      {a:'bb'},  P7 Y# s* K' @, i3 T7 O: M
  26.      {a:'cc'}* z. h0 F$ c( ?2 K! r6 f9 X
  27.     ]9 U* l9 t8 j2 l/ F9 V% i
  28.   },
    : }8 P: e0 s9 v4 ^+ c* q
  29.    methods:{
    ' @* ]8 w, u6 [8 ~0 n5 x) j' N
  30.     tap : function(){7 i& n. \, K; L$ f& x' C7 G5 Z1 [
  31.      this.arr.unshift({a:'new'})) c2 b( I$ h+ E& n2 v
  32.     }
    ' \. `4 s; Y8 J7 o
  33.    }9 P; D0 l' N! k  d
  34. })# a# d# j" ]1 z' [7 X9 v$ `
  35. </script>
复制代码

. A$ k2 W* W0 y* H: a2 @% A

/ r: d/ z, c3 Q) B: Z0 x
在这里参数是监听的事件名。
% e$ x; R' i& B9 i; j1 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 13:35 , Processed in 0.131468 second(s), 22 queries .

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