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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15315|回复: 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">
    ) t8 S: g9 \  `8 H! A( p/ `# p
  2.   <p>{{ message }}</p>; J! s- `: R0 @- g) a( |7 `* v
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    & Q- h/ y1 }, Q- L
  2.     <div v-html="message"></div>; x" ?- G2 y& Q# G
  3. </div>( v! A$ C5 ~: A
  4.     / Z3 V1 i7 l9 z: G% [
  5. <script># z  i/ K9 f4 f: ^$ g( Q# l
  6. new Vue({
    . x$ v! z2 ~1 T: D/ n
  7.   el: '#app',/ I; m: K: F; t$ f. R  s1 {5 h5 q
  8.   data: {
    * T7 |3 X4 F. D* I, \; |3 X& I" F
  9.     message: '<h1>菜鸟教程</h1>'
    7 g/ ]# W! u( l5 j! k
  10.   }
    # {9 m# b5 |" C) T7 K5 ]1 ?( O
  11. })$ N9 t& E& W# f
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">2 V7 k/ t* @3 t- ~
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">- o& E: I3 Q* S5 A) O; v  B& o
  3.   <br><br>& ^- x0 {# o6 p! Y- J% N
  4.   <div v-bind:class="{'class1': class1}">2 R9 e! j* H6 K+ ?
  5.     directiva v-bind:class
    . q" v- o2 }6 \( g# i& r- V2 N5 I
  6.   </div>
    9 Q# Z) ]# a. g% e: k0 U) C' r4 E
  7. </div>. N: J4 D4 a4 c% [6 m7 N
  8.    
    8 n. r8 }$ \  g3 ~/ r
  9. <script>
    + j, V% O+ a6 y
  10. new Vue({+ w1 V" S" T3 b/ H
  11.     el: '#app',* g3 E  p! \3 l1 g
  12.   data:{9 i: v% k9 V( E1 t5 ~$ v
  13.       class1: false
    ' U, ~) X/ X: |6 Z
  14.   }' E# C& y- u6 @: o! I8 w! G* I
  15. });
    3 b& L" z' v) g# `2 m
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">$ L' D4 a4 ?% N* h* k! T! \
  2.     {{5+5}}<br>
    3 }- T; `/ e1 j+ S# N# X9 l
  3.     {{ ok ? 'YES' : 'NO' }}<br>7 H% T4 [! s6 Z* e) S0 |' i% |
  4.     {{ message.split('').reverse().join('') }}
      z. I: x: ~* k, }' `
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    5 Q/ ~# Y4 K1 W) X7 |$ n0 m
  6. </div>. n" }  f' D2 m$ i5 M% D+ Z8 t7 V
  7.     " y* v- F  S* l% @7 R6 u* r/ w8 G4 j
  8. <script>; {9 |7 R1 k% h- Z# E
  9. new Vue({9 p* m$ {4 S' O# L" W  n" y* W
  10.   el: '#app',
    7 g; N3 [# i$ Q: [% `2 c$ E" A
  11.   data: {5 ]# }6 D. _1 N7 F
  12.     ok: true,
    & x1 f: N( \$ [. ?4 P
  13.     message: 'RUNOOB',& U: \; G6 B$ c- Q$ U
  14.     id : 1
    # f* Q( o( D$ A( u( a4 j. V+ v
  15.   }
    % h0 T7 v1 d' I5 ?; r8 N3 k: U
  16. })
    5 n0 e3 R# p- m" e+ G; Z+ [% |
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    5 i6 H1 x$ B7 v! X# G$ Z6 O) {8 n
  2.     <p v-if="seen">现在你看到我了</p>" [( J; X  \3 W- I2 u1 ?( w* [
  3. </div>
    & }/ M& n1 ~% H* x0 f- E# [5 L- R
  4.     0 m. m' I4 ^/ ]/ S+ Z2 I) c  \$ n
  5. <script>
    / X1 y/ O) z. H' w/ D
  6. new Vue({
    9 [9 \9 n" i  J" j) P, A
  7.   el: '#app',
    , b) X: a! {( A9 y* l. t
  8.   data: {8 r- T! [/ b" h1 |- d0 L' \1 j
  9.     seen: true) _: |5 E, x  Y( ?' J7 w6 K
  10.   }4 Z9 \: Q7 f: B3 z) n+ u6 `
  11. })" p5 P/ {. f& r+ _5 j7 R7 W+ s
  12. </script>
复制代码
% F: w, H# X! p$ i) ~2 T
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">% ]: [5 r7 N. ?' z# V& V7 v! r
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    3 h5 t. f# ]; @. q+ z: @
  3. </div>
    # c" x6 d+ u# f6 B, V" c
  4.     9 A3 i2 R! I0 U& T( x* {
  5. <script>
    2 o, J$ q# C9 E- n7 i" w
  6. new Vue({7 n5 p) R5 c9 c6 t
  7.   el: '#app',
    - T9 j! i- G; Z& B) I
  8.   data: {
    7 U& b  Y' }, y2 c. T# z
  9.     url: 'http://www.runoob.com', X1 X; p$ R* b8 G3 H  F- H
  10.   }
    - s. Q& Z* ^+ l" K
  11. })
    / u; ]8 U8 j' F  X4 t, x/ m$ }4 V
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

% G6 b2 K2 g7 j+ V# ^) E( A  n
  1. <div id="app">: s- _/ D+ P; _+ Y
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>1 Z2 l- t: T. L$ o/ G3 M
  3. + D% d5 `: g8 R- {7 L9 j% f
  4. </div>" ?: o4 N) ~: i, {6 L/ I

  5. : d2 |! r$ {3 W/ O3 J& {/ N" |
  6. <div id="app2">
    , f2 p9 j; ~* h: U. ^7 F2 [7 Y
  7.    <p v-for="val in arr">+ Y# T) c( ^' z4 M# m# k9 W
  8.     {{val.a}}& |6 Q0 t0 W( [7 d8 ~
  9.    </p>
    ' q' ?1 }4 f9 t
  10.    <a  v-on:click="tap">点我</a>
    - j5 a$ @/ z0 Z- J1 s3 d
  11. </div>
    ) `* A5 ]2 c- f

  12. 5 X- U# W0 f# ?- ^
  13. / {- h# Q: J0 F  k; A0 b6 Z$ D
  14. <script>
    * {3 c; N3 U- ?1 o3 z
  15. new Vue({& ^+ C: ^& q: ?  q. ~
  16.   el: '#app',
    ' u- ]/ X" l3 R& n7 Z8 l, ~1 D
  17.   data: {2 T5 H! `# M' l. n% N; Z1 a
  18.     url: 'http://www.cncml.com'
    2 N" l* _- O) [- Z. P: Z" w3 Q
  19.   }
    3 r. o! A0 Q! P/ g
  20. })* J: V8 V$ e4 |8 p
  21. new Vue({
    ) K$ F1 v& r( C, n9 u, B, S" d" f
  22.   el: '#app2',
    5 n) O% R$ V( x; D
  23.   data: {2 C( ?4 r% K1 Y9 L" v
  24.     arr:[- j+ t& t$ F, a' L8 f7 h
  25.      {a:'bb'},% W( z& E1 ~  Y$ v
  26.      {a:'cc'}, L% D# |/ c8 T/ ^6 ^! q2 c
  27.     ]
    6 k) A/ O) c& A+ \* }# W
  28.   }," e8 ~- H) l8 ^; L6 u
  29.    methods:{
    % f9 s0 }$ P- O  r& W; b9 N9 N& p
  30.     tap : function(){
    # D9 h! \4 B5 Q/ o
  31.      this.arr.unshift({a:'new'}), ?3 E  ^# V+ s
  32.     }2 ^5 l2 ]$ h" D: W8 Y: f2 N
  33.    }
    # Z& |! k& r6 X$ O& ]
  34. }); q+ p0 i5 x7 }$ @% m+ x
  35. </script>
复制代码

# [  Q- p9 u( M5 f& I+ p
, g( F* K& `+ T& Q$ P0 S
在这里参数是监听的事件名。

0 j  r2 _, M4 e, p: U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:32 , Processed in 0.060556 second(s), 22 queries .

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