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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10727|回复: 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">
    1 B- E3 N: a" d
  2.   <p>{{ message }}</p>
    . i( |% @$ t5 V  Q# f
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">  ?% t. L$ D, F/ r( X# M- G
  2.     <div v-html="message"></div>9 S1 M  r( L5 G
  3. </div>( V8 v5 u- X) L
  4.     + g) b8 w7 x) M" \
  5. <script>/ [1 G4 R1 Z7 _. }
  6. new Vue({) C$ Z. X( w8 s* h) s, \/ x; p
  7.   el: '#app',. y" V2 F# v' d6 h  o
  8.   data: {' H( v0 ^) E% h
  9.     message: '<h1>菜鸟教程</h1>'
    8 z9 R' b; I! L3 }0 D) E6 C) y
  10.   }
    , m9 v: y; b( q5 h4 {
  11. })2 b' {* [0 w- d" K' P* A6 x$ _/ i
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    & t2 X7 j% o5 K) ]5 {5 i
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ; `5 C" j, [2 @/ Q8 R" F% K
  3.   <br><br>" `! A7 c1 H& x; e4 G, Z& D
  4.   <div v-bind:class="{'class1': class1}">
    9 @/ F; z. M7 [. G! Z+ J$ @
  5.     directiva v-bind:class
    " a+ k0 v* C2 Z  y- J
  6.   </div>0 Y) P" H$ i8 U6 W  N+ G, Z" }
  7. </div>
    8 c* G# @$ I5 j- r0 b; m: ]
  8.     2 `. q- @4 J$ l& k, D  V
  9. <script>
    % Y2 {1 a0 L+ @3 p+ K$ ~2 @6 A
  10. new Vue({
      Q& r7 M1 X; P6 O
  11.     el: '#app',1 A2 h2 }6 t2 A! _: s+ \3 I
  12.   data:{
    ; X9 a0 |0 M/ A! [1 n$ U# u9 i
  13.       class1: false7 s9 j, j0 |% {, k
  14.   }% L8 Y$ b  `& }# _: g( a1 S. j
  15. });
    5 c. K0 R- i4 r
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">* I. ]' i/ L8 J! x# N/ _0 D8 b7 M
  2.     {{5+5}}<br>2 t6 j4 s$ [: T0 G6 P
  3.     {{ ok ? 'YES' : 'NO' }}<br>) o# S6 H! L* O$ d3 K3 q
  4.     {{ message.split('').reverse().join('') }}
    " k9 f  I& ?8 O- l8 U0 `9 b  O
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>7 c6 ^# F1 J5 w2 o8 s, F
  6. </div>& ~4 J8 Q9 N3 ^6 K; m( a
  7.    
    7 ~( n% ?/ Q, O  M# y
  8. <script>
    0 h5 O8 _8 J  w; U0 z# z, i+ Q
  9. new Vue({
    7 P7 a1 b8 d( U$ U3 l' O6 K7 E
  10.   el: '#app',
    6 u& x' u8 o: M! F* c
  11.   data: {
    7 L1 }) W* x2 {
  12.     ok: true,
    $ d: w+ A! L% r& [" z! G! r
  13.     message: 'RUNOOB',& Q* [  _& K8 k. e  e  _; F8 G; `
  14.     id : 1, V4 y3 t+ ^9 C2 n9 X! y# d' S. y$ E% x
  15.   }
    # F' I( z, X- Y8 s+ `1 R  x
  16. })
    5 }; F& i# O5 B3 d- M
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">; {5 J! X2 R# S# P/ p
  2.     <p v-if="seen">现在你看到我了</p>( d, E4 |9 j) h/ Q& R3 w
  3. </div>$ @; G( T. o2 y& i6 ?) B
  4.     . r3 g# Y* I$ n- K/ ?4 g/ I: u5 i
  5. <script>
    6 `; {  x* Z2 i. z( e
  6. new Vue({
    " [" w, e* ^: l6 ?, n
  7.   el: '#app',. ?. w0 U; N8 z5 Q  l0 o6 J7 o; Y/ J
  8.   data: {
    ( N0 g+ z* g0 T# O: {  M; X
  9.     seen: true& l4 Z" x# o' \% C* Z, q) D
  10.   }9 X3 V, G, o2 @
  11. })
    * }6 J) S& r4 n3 ]1 r
  12. </script>
复制代码
: f" f* b& `% s( T: H* J& B9 m
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    ( ?. T! K" \" K3 f. G. J
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>0 @5 t, @9 N# |" F
  3. </div>
    : ^% ~% [9 C9 |: N$ F- f0 S
  4.     - T% P! d3 u1 J
  5. <script>3 V  a$ n; j# ^+ @& Q
  6. new Vue({
      ^5 C8 x/ U- U0 S. N. u  b
  7.   el: '#app',
    0 P6 y- C( w% l
  8.   data: {8 p: [7 a6 \5 ~  g: L' T
  9.     url: 'http://www.runoob.com'5 f2 C. E8 `1 Q( k
  10.   }
    ' K5 u" m) A  P5 U- k: Y# {, _
  11. })
    $ \: z' b5 [9 o
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

- \: D) i1 }" e8 N
  1. <div id="app">+ R5 R# q# Q4 \0 O: [6 g
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>+ i1 i9 b/ n: m8 i2 ^# k
  3. : I2 h* j+ N. f; J
  4. </div>$ ?$ O2 d" x/ G6 W

  5.   z5 T. U% K8 c# i( n; U2 }  Q
  6. <div id="app2">  q6 I6 Q; L. i7 I4 ~
  7.    <p v-for="val in arr">
    ) K6 t$ j5 B( d; b
  8.     {{val.a}}! G1 n" `' C4 f6 ^: B
  9.    </p>' }) H; Q/ p2 L9 z
  10.    <a  v-on:click="tap">点我</a>" a4 \. T2 k2 t8 b! O; o. q
  11. </div>
    , D& ~" P* w7 P: N

  12. 0 C/ Q) I5 p1 `. {% n9 G
  13. ( a, O4 K' I0 v
  14. <script>( V" u$ q8 y' ]# U
  15. new Vue({
    8 F$ v! g; u% r6 a
  16.   el: '#app',) f# {* c3 }% D5 K- `, P2 T
  17.   data: {+ K- o& v' o- |7 z
  18.     url: 'http://www.cncml.com'4 B; C5 S% d4 f* p% l
  19.   }
      G" `3 O4 x" J' ^+ h4 `/ t
  20. })
    ' d& B% i. ~9 E' I- Z, F
  21. new Vue({1 h- z3 F  J5 n  X$ ~: D2 W
  22.   el: '#app2',
    + H' X. E/ [8 b7 k- I) i5 g
  23.   data: {) v$ ^. e% u4 l
  24.     arr:[* v7 U0 G! B$ R: v/ ^$ q
  25.      {a:'bb'},- F. c( J9 u* U. z/ V
  26.      {a:'cc'}& d6 i2 u  R6 Z1 g2 k
  27.     ]! R" Z% O$ R0 d; r& O
  28.   },9 E3 G1 Q8 H7 \2 z
  29.    methods:{: b# O6 ^% e- I% j/ |' K2 d
  30.     tap : function(){7 u# A& E6 R$ c) d' S
  31.      this.arr.unshift({a:'new'})* g+ Y, l8 q/ A! i
  32.     }
    ; i, g; H! n2 w# ^3 k0 W% i
  33.    }
    " v0 I: c  e5 n
  34. })" |9 ^& W/ c; m8 r0 w" F
  35. </script>
复制代码

1 j$ r6 O9 D" O; h6 k
7 Y6 k1 j( e* X+ g
在这里参数是监听的事件名。

- @, U$ i% h, l& l$ v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-16 08:11 , Processed in 0.165778 second(s), 22 queries .

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