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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12464|回复: 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">
    - Q! J, q- _5 A% g$ V/ E
  2.   <p>{{ message }}</p>" C$ o+ p7 |7 l# A* }* K( H
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    ' {$ X, C9 _/ t  r: C+ |
  2.     <div v-html="message"></div>
    / Q/ G+ W0 ?' Y7 y$ w/ t
  3. </div>/ u8 p  t) d7 S0 T2 }$ _7 D/ t1 U& H
  4.    
    4 ^6 D: |) R, o9 V1 D
  5. <script>+ J/ B6 T5 s- T5 g7 M( u, Y
  6. new Vue({$ F! H* B8 u4 S: C4 C3 ^7 f
  7.   el: '#app',+ L; T5 M+ T8 }  O9 Y  u" `
  8.   data: {0 I: F" G+ z9 g3 U
  9.     message: '<h1>菜鸟教程</h1>'
    : I3 U5 Z; s  p5 S! `4 X
  10.   }
    * F+ o0 R$ P2 x# J7 F1 Z6 i
  11. })- o1 D) [1 ~: o$ @" }+ U. v9 b
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    / j" w2 m. e' e/ [6 M. D* ^
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    / Z2 t- P* ]) E
  3.   <br><br>% u% q0 D0 i1 L! c2 w% n
  4.   <div v-bind:class="{'class1': class1}">
    7 q6 k0 V) |) k6 _
  5.     directiva v-bind:class
    % g4 M$ G. C9 R% W, F
  6.   </div>) P* h2 l' w- G
  7. </div>- m, j( P" f( ]: [
  8.     4 W) F5 _+ f# Y. f5 h0 G% p
  9. <script>2 r1 \- r. ]2 I
  10. new Vue({0 f2 J  Q2 G; q( {. o4 l0 o" f. c% m
  11.     el: '#app',; v7 w- p2 ~2 h  j' y0 Y
  12.   data:{) U& _2 Y2 T& c! N
  13.       class1: false* h- n4 k9 H+ v) i% ?4 H  C
  14.   }0 e, w& r0 |0 M# W) S8 [7 m
  15. });
    7 L+ q; U0 ^8 x- M
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    7 ~( ?& j" U  _- X' V* [
  2.     {{5+5}}<br>
    $ ^7 d5 c2 x+ Z* D  E( u8 r
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    " P; R: X: Y$ L
  4.     {{ message.split('').reverse().join('') }}
    2 {5 Q* o: R' x
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    ; {0 w# G7 K% W6 l
  6. </div>
      X, i) v! p7 W+ X1 I* _1 G0 L
  7.    
    2 s9 Y8 R& [. g+ q. Z# v
  8. <script>) g/ g! K- L8 N' G0 n, ]7 X9 z7 Q
  9. new Vue({9 R" r  k4 K. S3 Q9 Y7 U' X
  10.   el: '#app',
    + N$ Q7 B1 d3 l3 O+ l: R2 Y
  11.   data: {
    ) B% U' X( p; M  V- p, r! a2 D
  12.     ok: true,
    - j8 d; l% h! A" t+ ^6 ^" ^
  13.     message: 'RUNOOB',. c* C. R+ F: R& _& i
  14.     id : 1
    * W7 [; {" A; O9 W6 K" P9 ~
  15.   }6 }, d* J( v% f7 o( v1 n7 o% o
  16. })
    $ S6 i* V; y: v* ~
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    3 n6 e8 D4 i# {6 m1 k1 ^2 @( {
  2.     <p v-if="seen">现在你看到我了</p>5 @/ P5 D4 z1 m. E. s" y* d% T6 ]
  3. </div>% Q2 u1 ~% \2 V, @
  4.    
    % t" a+ D9 c7 h
  5. <script>
    3 V- e/ t9 G* y  l; x4 E
  6. new Vue({
    4 X! a" M) U! `9 E
  7.   el: '#app',+ R2 B$ |5 \' x4 J/ z/ Z( ^
  8.   data: {
    5 Y/ c8 G. z5 d3 R$ G' a
  9.     seen: true
    ) y5 m( _2 f9 J, X! z% v9 U: [
  10.   }, S6 x$ _9 ~& m  p4 i8 T, Z3 X
  11. })8 {( X% Q- [" q
  12. </script>
复制代码
4 C9 K% t+ r9 x# ?. k
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
      [1 b3 U1 h# ^
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    & x7 z$ h% N7 D" A6 q: U1 f
  3. </div>
    ) J* M+ W: B; F. z
  4.    
    $ A8 ?3 L* i+ ]9 c8 X
  5. <script>  M. J, {$ c7 D8 U6 C  q# ^6 l% U
  6. new Vue({8 k5 Z/ m" x! M0 D" D2 f
  7.   el: '#app',0 I% K1 w. X% x: z. R0 j$ P
  8.   data: {
    , h0 z- r, [. j# N
  9.     url: 'http://www.runoob.com'( R; x& j* {! x8 L% I  d" u. s
  10.   }
    : h# c9 ?" w, W6 A# b. Y
  11. })
    - _6 N' G! M2 {. a' {. w& m$ u) {
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
! s& K# p- c# h& s
  1. <div id="app">
    ! q3 r& ?- _6 p. d2 L+ z
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    # x1 l* t2 ^4 v; g6 X3 M6 b
  3. $ [  H) i! {8 l7 N0 _
  4. </div>, B; a9 c& u6 N' p' i- `

  5. " N2 d$ i2 `) q8 g
  6. <div id="app2">
    ( W0 f7 r- [/ k$ s" F
  7.    <p v-for="val in arr">0 o% c% M/ {" N2 Y/ \
  8.     {{val.a}}# m/ f! K" a" ]
  9.    </p>7 b8 H, n7 F' U5 @6 `) m& i
  10.    <a  v-on:click="tap">点我</a>' Y! o7 ]# a. e* V1 K
  11. </div>
    7 }% u. R! \4 W

  12.   B2 B/ O5 Y2 h+ [  M; S
  13. ' K# L6 e* u! M0 O! w/ [
  14. <script>
    $ f7 d: v2 R' n& e) D
  15. new Vue({3 c/ K! U  F5 q( |* \3 \
  16.   el: '#app',7 \9 c! p0 v; P" P- F5 c( D% h
  17.   data: {
    " T  i) \; l# p1 K+ L& I8 g( k
  18.     url: 'http://www.cncml.com'
    8 D$ N$ Z1 ^8 y4 n
  19.   }
    $ n( J- t5 a$ |; F. u5 c0 O
  20. })$ H* g* P; M" N1 k+ H- D
  21. new Vue({% Z# i5 `! J% c! \% f7 J8 _
  22.   el: '#app2',
    0 S  D( B+ U9 }/ f8 O" B
  23.   data: {
    9 d& c$ d3 _5 T# [- L0 w3 L
  24.     arr:[/ P' i0 _& ^3 a2 Y! l3 J
  25.      {a:'bb'},
    , @( @+ p: l$ [7 y
  26.      {a:'cc'}
    3 |0 Y& ^  k3 }' A+ t
  27.     ]4 g, n4 b7 f, E9 r1 F- K9 j2 F! O
  28.   },
    3 ]2 N" L; v7 T4 J6 n$ P
  29.    methods:{
    1 Y. r1 N* G  _7 f4 b6 p- A
  30.     tap : function(){# c1 a0 l! O5 j1 s& [. t# s
  31.      this.arr.unshift({a:'new'})
    . e+ W. c# D. a! c  l; R1 F
  32.     }
    - ?( {7 A: I# k' p
  33.    }
    : S; y7 P6 k" T+ h
  34. })0 J# n+ \# L& y
  35. </script>
复制代码

8 j# S, Z# t# M' D/ X+ g

+ U) Q  Q$ K* ]: g& }3 [6 [
在这里参数是监听的事件名。
& i# l  |/ A1 {2 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:27 , Processed in 0.157835 second(s), 23 queries .

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