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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10814|回复: 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">
    ( Q9 c; }  p& K. q* {, s
  2.   <p>{{ message }}</p>' x2 L+ A* Q2 f1 g. n. }1 Q
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">, Q. X6 \) @% P7 ^5 _% h6 J$ U. k
  2.     <div v-html="message"></div>: b+ K' Y8 u/ O( Y9 @
  3. </div>4 q7 ^4 J; G3 r0 a$ s2 o2 |1 k7 B
  4.     ; @: f! s0 |3 n/ I) Q
  5. <script>4 }7 y  J7 s6 e8 z. A6 O
  6. new Vue({  ?& E+ ?" [0 z8 g, E, \3 E
  7.   el: '#app',$ @  K0 ?0 [4 O( D" G
  8.   data: {7 a' i! }5 m* l# Q$ o
  9.     message: '<h1>菜鸟教程</h1>'
    : g8 E. W4 o7 W/ h) L2 c
  10.   }& a  [4 a0 K* U& c# [; D. w
  11. })' J* c, F. K2 h* ^% {  p+ ?
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">& c, a4 s( T. ]& L) _* G0 {0 R
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    / _1 {4 h: O3 J3 E
  3.   <br><br>, P% f( J7 B) @' k3 X8 H
  4.   <div v-bind:class="{'class1': class1}">: r2 j5 e. C+ B5 f2 m1 ~) v0 d
  5.     directiva v-bind:class$ K. A$ @  ]; p) Z5 K
  6.   </div>) q# C  o, }& t" T
  7. </div>/ a6 ?, x" u7 w* s& t- ^! Z# y
  8.     ! r1 m, u0 s& r- ~. P; h7 h+ F
  9. <script>: M' |7 O% d' f8 T; O
  10. new Vue({4 j3 y7 z* w0 v
  11.     el: '#app',
    7 ?3 C4 l8 i# A5 a- p' Q
  12.   data:{2 r8 ]+ f3 x. t7 s$ L+ s/ [! ~* |
  13.       class1: false( s0 [) x% L) M0 `
  14.   }' K- j/ s0 D& O! I
  15. });5 U5 D( s. t! K  a8 v( X8 c+ i& q
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">3 w, E) O* j4 s4 G
  2.     {{5+5}}<br>, T4 m9 \7 C5 F
  3.     {{ ok ? 'YES' : 'NO' }}<br>7 @- Q4 i2 ~8 r; R+ I/ x& t  I9 P
  4.     {{ message.split('').reverse().join('') }}# U7 S  H4 r( S
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    3 A( u; y! R# t$ |0 e' r
  6. </div>
    ! K$ p4 k- E0 D+ D
  7.    
    & [. Q; Q# i1 E  L. c5 D
  8. <script>* ?3 s2 \9 a8 O0 G
  9. new Vue({. G0 ~$ E$ S+ D$ T$ S0 d9 |& K
  10.   el: '#app',. H* h! e! J' k) @8 b6 a9 s% S
  11.   data: {
    $ d' P; Q% s* H4 {4 D+ ?  T
  12.     ok: true,
    & x  D* J3 ^& P5 F+ j: X
  13.     message: 'RUNOOB',* c& q( j1 j6 M* h
  14.     id : 1
    ! E) Q5 r2 S0 i& z9 }* t
  15.   }
    2 `6 D6 C0 E. g& Y; z- C  ~3 M. j
  16. }): M7 Z) D- \; i, N1 \, [- G
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">  k, ~* i5 X* {- j7 a  I
  2.     <p v-if="seen">现在你看到我了</p>
    " u! H) ^  \7 q5 g
  3. </div>% v( R1 Z0 b: K0 y6 j, }
  4.    
    ( l5 B7 j9 `3 {% x' I7 b5 C- g. }- C
  5. <script>; G# _/ o; q( W; L: C$ e
  6. new Vue({
    6 C5 y* N$ g' Y
  7.   el: '#app',
    2 k/ `) d' R: A7 j/ e& t' [' c
  8.   data: {
    ( Y4 y7 S( s% ~9 N! X
  9.     seen: true0 y5 E, ?/ ^$ t8 L
  10.   }& e5 ^8 p( n; l. Y; Z+ ?) e
  11. })
    - X3 j- l3 a9 g4 i4 t1 O% `
  12. </script>
复制代码

8 O3 J3 P1 g% `5 f& R2 ~9 C4 S7 ?
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">  J: j. ~: D+ ~: L- W3 G
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>! t% A* E! y, u6 Q: \, w
  3. </div>
    2 c4 ?+ u" U$ d7 D" P
  4.     / G9 }( U) h; m  O. U# p
  5. <script>1 V! P# @4 F# a3 H
  6. new Vue({" e$ ?+ E! s8 w' d
  7.   el: '#app',, m  L! ~5 g9 S; x5 h
  8.   data: {: V! @% W" ?  F- P  @
  9.     url: 'http://www.runoob.com'8 D, X+ D5 d4 d9 l
  10.   }! d5 s6 W9 u  D' s  m1 o( [, v9 x7 I
  11. })
    + N9 J) ?8 ~. i0 H& Y" x6 b* G7 M
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

2 I4 m) }" m! V1 h/ @4 l
  1. <div id="app">: X7 z: O* o7 W5 p6 s. t) f' F' B' }5 E
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    . v( m9 U. i( `% G( W( g- l8 i

  3. % r4 O5 A: h3 H- y
  4. </div>3 V, T- I7 J5 {- t3 S: I
  5. 1 V8 N. Z3 C9 G  m, J, B; @
  6. <div id="app2">
    ! p7 c; ]9 B$ U
  7.    <p v-for="val in arr">, G4 |; G5 C/ E- A1 G. l6 u
  8.     {{val.a}}7 Q- ~1 t: y, v/ F5 e. |; z
  9.    </p>
    9 k% I: a; x( N" |
  10.    <a  v-on:click="tap">点我</a>) L$ j5 F3 E1 D' P$ u# j- \& {8 B
  11. </div>
    5 T, h! M8 O: ~+ S6 O1 O2 M" a
  12. " R8 R, F4 G/ C; D( x5 p+ p

  13. / b. r! O( A8 ]6 w7 M; L0 |
  14. <script>* }/ \, n# E2 i% t( M: r
  15. new Vue({
    ; V/ K1 R# T( V" M- U2 \4 J
  16.   el: '#app',
    ! `$ A& b! |5 E
  17.   data: {
    3 L) b& X4 X4 Q, ]0 S' P% V
  18.     url: 'http://www.cncml.com'
    4 @; u3 ^5 b/ \! o% q) V' p6 E
  19.   }
    0 y- H9 |3 Y' j, @" W
  20. })
    7 ?% H$ B* L9 q. z
  21. new Vue({; I  E' \) S2 b. Z5 M6 x% S" k
  22.   el: '#app2',# b5 Q! d6 w8 Y% U; B
  23.   data: {
    . Q, ?& X! g8 x) j; W7 T
  24.     arr:[
    - o; U2 N# l! F& Z& E" F+ m( a
  25.      {a:'bb'},' |  j. z7 M7 N
  26.      {a:'cc'}
    0 s! p3 ~& k1 @$ F+ C0 o; Q2 H4 R( Y
  27.     ]
    & B8 s3 F! O& a! o! b
  28.   },
    8 x0 p; n& x* r& q$ H4 H, s5 L; T: Q
  29.    methods:{, m# _7 I# \  H: {# e  X1 o$ Y
  30.     tap : function(){
    + a" z% a! Y& Y) O: [2 v/ h6 K- {
  31.      this.arr.unshift({a:'new'})9 f& G" S3 R& b2 O& M2 {
  32.     }
    # ?8 o/ e+ G8 v7 Y. y$ g
  33.    }8 @( L7 G. ?: u, C! ?; f) m
  34. })
    5 G1 M- D: i" r7 M, v
  35. </script>
复制代码
1 b$ h) o+ m8 L9 G

  h1 x3 s# o3 P; A
在这里参数是监听的事件名。
  ]( Q5 e: {7 k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 15:47 , Processed in 0.148170 second(s), 22 queries .

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