Vue.js 模板语法 Vue.js 使用了基于 HTML 的模版语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。 Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统。 结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上。 插值文本数据绑定最常见的形式就是使用 {{...}}(双大括号)的文本插值: - <div id="app">
) M: W# A j; c/ w; }$ ]4 [" Z5 n1 X - <p>{{ message }}</p>( \% J8 m/ f* h/ l) B& k$ K$ ~- Q7 m) P
- </div>
复制代码 Html使用 v-html 指令用于输出 html 代码: - <div id="app">
e- {8 [ v; \$ H w3 U$ `" Z - <div v-html="message"></div>6 E* @* {. V) n. O0 b
- </div>6 f5 \$ }( j2 g+ W
-
, e+ s- D/ g& l5 Z - <script>. i$ N* U0 N ^. x% d7 x; a
- new Vue({2 N2 ^& I5 N* x& |% G, k
- el: '#app',
/ g4 Q( Y" y+ I. d- t0 K - data: {, v" | e' z7 ?& s; ~
- message: '<h1>菜鸟教程</h1>'% P% W& U; r2 C& q3 o, A7 a. R% k
- }5 k, l5 I! W5 J3 Z$ y4 u) x) O8 a
- })
7 ?5 q, }6 Q2 `- z% v0 \ - </script>
复制代码 属性HTML 属性中的值应使用 v-bind 指令。 以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类: - <div id="app">
7 E/ |) w" b' f l, M' } - <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
" T) T: P1 S/ Q8 N; K5 `) b - <br><br>0 h: a. B( p/ I, i
- <div v-bind:class="{'class1': class1}">
2 S; U9 T- U3 a8 H! N+ F - directiva v-bind:class C. w5 g' H, A/ p. f4 q3 o9 ~* R
- </div>$ N+ ~4 \4 I5 v6 g& g4 [' A
- </div>
2 b8 ~1 s. ?' ^4 @; @/ V6 ` -
' H' Y+ y, e8 R4 l0 _1 N) k - <script># b! C9 `9 R1 m+ d: `
- new Vue({& H; K+ m/ s X* b( T
- el: '#app',
. r1 I% m8 z; P; L - data:{, U n6 }' z$ A2 I0 r/ ]+ d) A' [( N4 b5 @
- class1: false8 Y s0 a; H+ E0 q% {( X1 `9 \
- }
8 b8 r3 ~% C, s - });
. X1 _: \& b6 u/ l - </script>
复制代码 表达式Vue.js 都提供了完全的 JavaScript 表达式支持。 - <div id="app">
/ q: ~4 T( ?& v: J - {{5+5}}<br>
" w6 F: M$ E3 e' B$ s - {{ ok ? 'YES' : 'NO' }}<br>
8 q: n' r6 q1 ]7 F( O' h* s3 z# s - {{ message.split('').reverse().join('') }}
# C& e5 L0 R. h. [ - <div v-bind:id="'list-' + id">菜鸟教程</div>
6 ?1 G; I' [0 O6 P; b/ A( T) j' ~ - </div>' g7 Q1 V& |& e# m& C( D* c8 x% M
-
* R7 U, C) g" T7 Y; n- v' O$ Q - <script>8 J1 g7 L2 D o9 Q- s2 `: X
- new Vue({
/ e8 m0 U& [8 A$ a - el: '#app',
6 s. m$ k A/ x* W, b - data: {
* T k9 ~, s" \6 k6 n0 V - ok: true,
4 @6 T8 p: F/ b) Y+ A# o- A - message: 'RUNOOB',. F/ h2 R5 c0 Z+ N
- id : 1
; Z' \- b% T0 { - }/ R8 n( s& E1 X: j; i# f
- }); q. ]0 d1 J7 V( a8 h6 U6 ]
- </script>
复制代码 指令指令是带有 v- 前缀的特殊属性。 指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子: - <div id="app">4 Q6 e1 k _; ?- A; Q4 s1 ^2 y
- <p v-if="seen">现在你看到我了</p>
3 M5 {9 m9 d4 t7 [! s" g- E - </div>
2 K# z5 A4 I2 z( w/ ^ - ' C* O) d/ `0 j3 _. C
- <script>9 J" T- A; n9 ~* O N% I( P# y+ g5 O
- new Vue({% y2 F& p% P* E) ^6 Q
- el: '#app',. v1 m( F0 i3 r1 q' u: L
- data: {$ o$ B; ]* j& b7 z, Q
- seen: true8 c7 @$ N0 R+ p- U2 j5 Q
- }* T* j* [3 {( W
- })
6 b8 e4 a# r' i3 T& x4 C [ - </script>
复制代码
% Y7 p5 B4 U' ^# M这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。 参数参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性: - <div id="app">
5 n# l9 {1 D3 | J8 Y1 b - <pre><a v-bind:href="url">菜鸟教程</a></pre>
/ h( \& [0 q* e. X8 ` - </div>& }$ h& H9 p, ~1 F4 L- G8 L
-
' a2 w) Z O, Q1 u1 [, g - <script>
/ [0 ~7 U; ]. N! }7 N - new Vue({% j. K6 E/ x- x- m( r! ?% a8 R! u
- el: '#app',
8 _6 E! u! T5 {1 G) } - data: {4 f9 A4 x9 @2 v0 ? s! E8 ~. g
- url: 'http://www.runoob.com'
0 p2 A8 x. s5 B9 u) }3 |$ J, D - }1 s9 c$ e, F6 P/ x
- })
; t8 n$ V1 i+ x1 z& m - </script>
复制代码在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。 另一个例子是 v-on 指令,它用于监听 DOM 事件: - <a v-on:click="doSomething">
复制代码
" @) G: w& P4 J' c
- <div id="app">
; X; X+ j0 w* l: `+ a9 B: A3 [8 D Q - <pre><a v-bind:href="url">Vue参数</a></pre>/ W2 C2 X$ d& @2 m5 ~4 H8 M
* W5 Y. n! H l7 R z2 x, Z- </div>
1 \8 N) s; H0 ]" N
5 @$ O, O" [. _7 S$ F$ z- <div id="app2">
1 {2 ^0 R1 k& i- |6 ^3 V/ y - <p v-for="val in arr">
+ F8 a' f% h* j5 X - {{val.a}}! p+ n% u" W I6 W4 Q' k# C; v
- </p>1 r" l" h' _& H3 c
- <a v-on:click="tap">点我</a>
2 i1 {- v- n( ~# I9 f# @ - </div>: `" K. ]% g: m& F0 R
/ \0 q% x+ v2 s- * e1 T2 T, ], k( O/ h1 I: c: c$ }
- <script>$ D$ k5 |2 a2 o4 k4 F9 r' _
- new Vue({
0 T5 d! W5 I% U& \+ t - el: '#app',
# ]; Y4 {9 t% @+ N5 X/ w - data: {
8 ^+ b& u1 L& [/ m1 a - url: 'http://www.cncml.com'
) ?3 ?, U: b+ }( V3 q; X: V - }/ P! E; Z! S6 e. B2 p
- })7 b; H% J, W7 m) m3 `- x
- new Vue({+ X1 E/ i: H8 e, U7 [
- el: '#app2',
) j! z* s$ _# b. y; w) A$ N - data: {7 A0 d0 r1 a' Y
- arr:[
4 z' H6 {0 f2 A, f& A - {a:'bb'},; B7 K- w+ s6 w" G3 \* A
- {a:'cc'}
$ e5 ~' A3 c$ j+ S% ?* i - ]
% ^ B/ o( {: G - },
9 [6 \+ S1 \ p# J& L8 R - methods:{
. X4 ?5 v/ d3 b4 d) r - tap : function(){
6 h+ [4 I0 N0 ~ - this.arr.unshift({a:'new'})5 s- y' q' N( }, @0 q' H
- }
! Y3 p; Y4 A; G: z2 \" n - }
& U5 c/ a! a$ V2 V - }). @. E; a( g) q% f" j8 H1 l) M$ q
- </script>
复制代码 0 m" C3 w0 ~. M/ Q# O/ B) m7 ^' h
$ K- u. e$ M* l8 }+ n4 ^2 j+ L- b& N
在这里参数是监听的事件名。 ' K# p, R* l1 i# F* K
|