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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16497|回复: 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 Q4 G4 j9 \9 d2 M; D
  2.   <p>{{ message }}</p>' E* `: ]) K2 ~* a# e. o
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">  o% n. W" M: z1 S
  2.     <div v-html="message"></div>
    # ]) t; [" W8 [' m8 I: q
  3. </div>4 J2 h9 e5 s1 K1 r9 G& s
  4.     * t& ?1 U; R; y/ I1 _
  5. <script>4 ?4 {6 T1 f) z" s& M
  6. new Vue({% t" r/ d+ v3 m% @5 }' v, P
  7.   el: '#app',
    9 v* H; X' u* Z) a- u% r  H7 q- ~) C- q
  8.   data: {
    ! O6 y$ S9 g, i3 s, [7 U
  9.     message: '<h1>菜鸟教程</h1>'" Z+ |+ T& H5 k6 F+ \2 C4 C
  10.   }! \! N+ J& L* I' k0 ?" R
  11. })$ k: ]5 p8 Z1 \. M, d
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    # h) P: b! Z2 a  c
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    ( h3 p% e6 ~' Q( V+ V) j
  3.   <br><br>
    6 p' h) E7 S$ d
  4.   <div v-bind:class="{'class1': class1}">
    7 h5 ^$ d: `0 H3 ~9 ^% Y' @* x3 U
  5.     directiva v-bind:class% @7 @! z; G# ^/ r% S
  6.   </div>
    $ s, g: l) v# W3 x- U
  7. </div>2 S9 p* ?, p" F- V" l
  8.     ' n  e6 w! r' Y
  9. <script>5 p+ X% c  ]- S2 n
  10. new Vue({8 k4 P  I7 U% |
  11.     el: '#app',
    ' Q; m  u1 O0 X, d. C; S8 K
  12.   data:{+ S3 b3 {: e' ^7 G0 u  y
  13.       class1: false
    8 b5 w3 A/ M/ @% `5 ]$ w
  14.   }
    + R+ k+ K) u3 g3 m$ [
  15. });
    0 K+ E7 w7 h$ T; c0 z# R2 r
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">+ J" \! F, C6 Y' @
  2.     {{5+5}}<br>* y/ v- f. L9 u$ n
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    8 h# I0 l; x1 r) a5 i1 j
  4.     {{ message.split('').reverse().join('') }}% G8 d1 N. X& V0 a" c% Q
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>. ]& Y% [  X5 ~# G
  6. </div>
    5 f) M) O; A" E) |" d! Q
  7.     - S* b) E* S/ @! q
  8. <script>1 U: ~! p6 d2 i, {4 ~
  9. new Vue({
    / V8 i" Y* l  w1 d8 d/ r
  10.   el: '#app',) z! ^5 t+ K3 s+ V  X6 R4 U
  11.   data: {
    5 O3 f7 x0 X2 V2 {, }% D: l- V
  12.     ok: true,
    5 B3 ]9 f" d& r# N: f
  13.     message: 'RUNOOB',1 \6 i, @8 G* }' a8 v
  14.     id : 13 ~1 P' x) t- ^: r% @& ^
  15.   }
    % b5 k5 s4 ?3 V9 }4 V! E
  16. })& \. ~, p5 L, |9 G* x! `& H
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    * H8 |6 U! I+ U* n$ c
  2.     <p v-if="seen">现在你看到我了</p>. A: o& r4 Z* g
  3. </div>
    * `5 I+ }5 K- e7 f3 L/ U
  4.    
    * o5 V: O  v  p+ G% R
  5. <script>
    ! v6 v+ S. l& T2 @! ]
  6. new Vue({
    & R+ p" j1 l: {* a9 x" O* m
  7.   el: '#app',
    & W* x3 @/ j, h! g6 f: \+ Y" n& }) M1 A
  8.   data: {. N3 _, }1 k. @: F. n$ }+ h4 O
  9.     seen: true& W7 e7 {9 h: K
  10.   }' Q: ~4 C$ |) U) E& s, ~
  11. })
    ) S( b: N- G* K3 D+ T$ l
  12. </script>
复制代码

/ Q! j, y* \8 A) f) i  g
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">/ k/ D& [# Q" r- W0 @2 a) C
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    - Y0 ^+ Y  b. A$ l) P; B
  3. </div>4 |" ^! V; O  ]1 L4 D1 j7 F
  4.    
    8 G2 @& G4 v/ p$ Z  {' O
  5. <script>* R& g! l  S; X- ?, }) l
  6. new Vue({2 Z6 G! p* Q3 j% I6 C" T' f3 r: C
  7.   el: '#app',
    . ]* Q% P. H$ x* |% H
  8.   data: {
    - a( T1 g# }; e& a' K# C( f. ~2 s& S
  9.     url: 'http://www.runoob.com'4 `1 J3 d. \4 i# o6 m
  10.   }  ?: h% M( _7 Z# U* ~
  11. })+ \" p! k9 I+ C6 B3 \: m* e
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
6 M* S. T% }, I. Y$ p4 d
  1. <div id="app">7 Y% j& \3 n/ f0 M/ [4 K. L
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>5 F- W/ w6 W( v; \- |/ _& v, c8 T& M
  3. - C4 Q! F+ S6 t' f' V
  4. </div>
    % Z3 ]) |5 r( G

  5. & ~% N! U% H4 N& K8 F# X( B7 Y# A+ R
  6. <div id="app2">
    / S. \7 K7 J+ [$ q( m% Z9 }  j( z
  7.    <p v-for="val in arr">! i8 _/ m3 r' X* f
  8.     {{val.a}}  B' ?5 L% x5 o9 `( t
  9.    </p>: k, A5 w" U( y* Z2 B7 f# E8 B
  10.    <a  v-on:click="tap">点我</a>
    & P! O( \1 ?* v* W/ Y9 t1 A
  11. </div>
    " v9 U, z2 _# [- y! |9 O( Q# J
  12. $ c2 d5 I0 p6 e# ^8 T4 I1 n

  13. . {5 y% t& L8 c& U
  14. <script>' i; ~0 T! u3 S. A# u. s
  15. new Vue({5 P9 D7 U5 f3 h: F# |+ Q6 I
  16.   el: '#app',
    2 f6 k. q6 }; m% Z8 }
  17.   data: {
    5 x7 D4 [4 V. I
  18.     url: 'http://www.cncml.com'& D- c; `* D) E& @& y
  19.   }
    3 e0 e8 C( E0 ?5 i9 L' q: E) u9 \8 p
  20. }). a! H( @- }$ W5 x4 x) j! |" P8 D0 y
  21. new Vue({! j6 y! K/ V3 A7 U* Q  x" U7 h1 c: O
  22.   el: '#app2',
    0 X6 `8 I; b. J' S: V# x0 c' l* J7 W
  23.   data: {
    * e0 v, R# r5 }  g/ J0 i
  24.     arr:[
    ' i% n8 }- B1 y) Q% ~0 ^+ p! o! X# F
  25.      {a:'bb'},) w+ z2 u' K% }# r+ z6 N9 |
  26.      {a:'cc'}1 K0 q5 H% w9 E4 B% e+ s2 g
  27.     ]5 m; H- Q3 P) y/ d7 Q) S5 s
  28.   },+ _) }/ {+ R, y# r5 d
  29.    methods:{
    - Y2 q5 Q8 H+ q: }
  30.     tap : function(){0 s4 v3 T! W# \: _% m5 R6 a
  31.      this.arr.unshift({a:'new'})$ E* P/ n, {! k( ]5 g
  32.     }
    # X+ P, b* w* R( e
  33.    }& S$ |" w1 f; a: |/ W1 T
  34. })
      i8 g) z. y' j! ^" L: d; P1 S
  35. </script>
复制代码
% i# g0 c4 D2 u  H) [+ a# i( ~! S1 {
# }( K: X9 O/ d. h8 P
在这里参数是监听的事件名。
+ f+ S0 X  w% h% L! b* [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 03:11 , Processed in 0.065920 second(s), 22 queries .

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