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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16514|回复: 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">6 @* ^4 \5 w2 z) g
  2.   <p>{{ message }}</p>
    , n+ i2 a4 y5 ^& u
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    " s9 \; \3 ?1 E8 B4 T6 I
  2.     <div v-html="message"></div>4 Q3 n: ^% x$ R6 e8 O
  3. </div>6 q7 [& f) t4 [  F- N
  4.    
    . }2 W* [7 i) z/ o9 \: s2 v
  5. <script>) k- @  f- Y+ W- g" Z+ D$ _$ q
  6. new Vue({
    - E. x  f$ f: W" G# A) `
  7.   el: '#app',; w* v  q0 G( q
  8.   data: {. G, Y$ ^4 W- ]  o; ^
  9.     message: '<h1>菜鸟教程</h1>'( R' A: L3 ~8 x2 S0 ~; v; w# j
  10.   }
    8 c- E9 N' e1 ^9 s) ~
  11. })
      e3 C  r  w0 r" |7 o1 L
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    ; s4 L) ?4 ?/ Q, ?, T7 a. T8 X  j
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    1 A2 C) a: O/ o( Z4 H- g  b$ K6 }
  3.   <br><br>
    : {9 @# O7 I0 ]" ~5 l8 V+ Z
  4.   <div v-bind:class="{'class1': class1}">- j5 e( r. |- b3 _* ?; W
  5.     directiva v-bind:class
    8 l7 ]5 [, o4 v0 D( E, r* J
  6.   </div>4 a6 o1 S) _# ]+ r. H( z8 q
  7. </div>5 s+ z: k( O0 H. K4 N, R
  8.     2 J( Y1 p2 F* T4 g: R
  9. <script># M% n/ H3 n/ g, X. `) A$ C
  10. new Vue({8 \8 ^  ?# r! K) r+ G
  11.     el: '#app',
    , A. {* g! z' S. W& ^
  12.   data:{0 }! [6 b' T0 o2 |0 p# ]- I% ]
  13.       class1: false
    , }7 C, n' Y; |8 f, F  Z
  14.   }
    ) W# E& Y4 }6 p) }1 f, [
  15. });- z1 l( i! [7 s/ G1 d
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    3 B: x: g! x+ d& r
  2.     {{5+5}}<br>
    # u6 o6 |9 }, S' d
  3.     {{ ok ? 'YES' : 'NO' }}<br>+ N" s" Q% e) e/ N( j1 K+ Y
  4.     {{ message.split('').reverse().join('') }}0 q+ A3 L# c: P' f
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>* g# Y4 d5 B3 c  a3 F
  6. </div>
    . ]2 z% C- H3 F* t/ ?% U: m
  7.       Q  f& T* x- _4 ^0 b
  8. <script>
    & V1 X3 A( W& x
  9. new Vue({% Z/ q) r5 I6 M, u) T
  10.   el: '#app',7 Y( [. }9 g* R+ v; G4 F
  11.   data: {! X/ S" C# k! L/ O' T" t6 Q
  12.     ok: true,4 [( q0 D# q9 K* t5 C! V) E, @
  13.     message: 'RUNOOB',
    * @. O( k: E$ Y: K" ?
  14.     id : 1
    4 x( d0 ]) i- D5 G. k
  15.   }
    ! X: O( c6 y" [9 f3 y8 M* k2 q2 {3 r( ]
  16. })  K# N$ S; c! G) X: F) \8 u
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
      ~/ {0 x& f. F1 P; t7 P9 q
  2.     <p v-if="seen">现在你看到我了</p>5 k/ _, ]: T2 _1 L
  3. </div>7 g0 c5 a* c8 K7 G- U2 r/ y* k  B% M
  4.    
    6 K% v. w+ W/ z. ?8 b- }0 @3 L
  5. <script>5 B! ?' v( i6 w# h
  6. new Vue({
      N; D1 g( k+ d" N
  7.   el: '#app',
    : L9 ]: W  h& W$ s3 Q) k
  8.   data: {
    , y- u2 b: A7 A4 P6 H' y3 @
  9.     seen: true1 Z8 n5 t3 V/ _8 V2 y' B& H
  10.   }4 a9 `% @; T) i' O( S! x
  11. })6 h8 [1 c: h2 s: n
  12. </script>
复制代码

0 \& h/ `/ g* o& {. [' B4 j
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">: {, f9 Z* P7 m( l& e( i9 V
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>, w3 v- {# o. y$ ^, ?+ I
  3. </div>
    7 Y& l  p, u+ E0 k
  4.    
    ) {! x0 q) s0 Q* a- D
  5. <script>  c4 Y* C* j8 R1 U- ?4 ~
  6. new Vue({6 i8 l( C7 P- J$ t6 N, R
  7.   el: '#app',
    # r, {! j8 H2 P8 R7 k( {8 y4 \$ p
  8.   data: {
    : {2 `, c- ^1 G# Q! B+ t( O* v
  9.     url: 'http://www.runoob.com'
    ( l, v8 u$ U7 ]1 O8 A/ u
  10.   }$ ~" _+ |& h5 {5 k& R$ P( w
  11. })
    5 q/ o* n7 U4 f; ^; Z4 W( B% @- o7 g
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

2 M. Y  B2 j- \9 A6 R" r
  1. <div id="app">
    4 r" i7 Z3 X8 c& Z3 Z
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    " Z" Y$ d! [. D  `6 Q) l

  3. 0 T' B* a1 U9 j# W
  4. </div>
      k) Z6 a' k# M- `* S

  5. " ]" G' h; f0 }$ k# P
  6. <div id="app2">
    6 `& I7 }4 ^; A. Y9 d/ |; H
  7.    <p v-for="val in arr">) k6 H1 m' Y, M$ e$ w
  8.     {{val.a}}
    - Z! Y- S6 X  {
  9.    </p>7 ?1 D# C6 ?" H% J& S/ W$ K
  10.    <a  v-on:click="tap">点我</a>0 R# O4 W5 z2 J2 o3 g; K9 B/ _
  11. </div>+ M  o& W5 c1 P2 R6 a/ ^6 t' c

  12. " d# Z$ c6 c7 w( b+ A

  13. 1 M& M/ ]. k/ y( t% y
  14. <script>
    . j& Z. t0 }( m- q0 ?/ Q
  15. new Vue({
    $ B( _0 O. ]6 h/ O# u' D* l
  16.   el: '#app',
    ) h+ D/ K& g0 c+ S# m! y
  17.   data: {
    & u+ t1 o' U5 x
  18.     url: 'http://www.cncml.com'( g6 q8 X8 ~* `0 S, [
  19.   }
    + J2 N9 l( |' i, e
  20. })
    ; B' V+ K! v. Y: Q; Y- h7 j
  21. new Vue({' X6 O5 q; i7 B" i" Z
  22.   el: '#app2',
    7 l" I" y  {4 j% |! a, u# R, M, w
  23.   data: {: M' K7 i, H: X5 ~8 S
  24.     arr:[+ @" s$ R! X# B0 h
  25.      {a:'bb'},
    ' z" w6 @+ Y/ w, E9 S. H/ ^5 i
  26.      {a:'cc'}
    " ^/ F* ?3 |3 m- L4 k$ H9 H7 h1 q
  27.     ]* J# p8 A8 F% b- n# v$ g) M: D
  28.   },3 J, R4 C: \1 k, `( I
  29.    methods:{
    & f9 w2 m( ^& L- ]! K3 @* j7 w& I
  30.     tap : function(){
    3 P8 f9 }3 M8 T+ l
  31.      this.arr.unshift({a:'new'})$ h' @! z2 V3 L% o$ n" C+ [
  32.     }/ T' d, g# U! U8 B/ a. U# b
  33.    }! e+ N5 r2 f0 i% T
  34. })
    ' @' `" O; b9 C( s; v9 {
  35. </script>
复制代码

; r! t  @2 o0 ]& g
- r# t) _6 u9 A
在这里参数是监听的事件名。
* U+ G8 T0 N% ~" v" k; {6 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 05:18 , Processed in 0.061756 second(s), 23 queries .

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