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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16515|回复: 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">9 z5 x5 |' s! Z$ t% w3 _
  2.   <p>{{ message }}</p>8 @4 }: [' P) W) j0 _
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    9 B3 J* b1 T" x) z: o' [
  2.     <div v-html="message"></div>  G4 A1 C- R1 V8 L8 P
  3. </div>
    ! g, a, }  L4 a6 {+ t, ]$ }7 {
  4.     3 o! ~$ a6 T5 P
  5. <script>
    $ p8 X" B- m/ \1 N* P% n
  6. new Vue({# }; ?. u% C- f
  7.   el: '#app',/ @" S" r9 X9 f1 Y
  8.   data: {
    - Z, y0 L: l. A& t6 Z3 q
  9.     message: '<h1>菜鸟教程</h1>'( S  Z- a9 S- E" s0 p( C/ v/ j  I- `
  10.   }4 E) R1 a9 A$ j: H! ^3 ~
  11. })" \1 ^! h& g' F" U3 D4 k  y
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">. ^$ G" T# T) p3 N3 ^! `
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">$ B5 g% d9 {; n
  3.   <br><br>
    6 s) [/ N1 f7 ~8 v, i  u" M
  4.   <div v-bind:class="{'class1': class1}">9 [+ p8 f) e) A+ _! ~
  5.     directiva v-bind:class5 g0 u" l. r$ y" U; z
  6.   </div>) R4 B4 R/ F% k8 y
  7. </div>& z+ B  U7 b2 x0 o( B5 g4 t
  8.     : j. w% I# c+ s' e, y$ X8 y% y
  9. <script>
    / p( x- b8 Y) H7 S6 Q' T! L
  10. new Vue({
    7 B# p/ M5 P# u# e, i3 h1 \- `7 ?
  11.     el: '#app',3 S, j8 B7 M9 b$ C. ^/ W6 Y, r
  12.   data:{
    ( {) ]$ I$ q, U5 n* H
  13.       class1: false
    + _) u& J& P) E( m
  14.   }
    5 Y' P  F3 b! P
  15. });. ~, }6 P( q0 Y2 ?0 s0 d+ e8 a
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">
    , T; ?6 B: P3 `% I9 v- ~% C
  2.     {{5+5}}<br>, n- A' o7 t9 i+ ~+ O% }
  3.     {{ ok ? 'YES' : 'NO' }}<br>4 H; E7 I" A) q( q( ?
  4.     {{ message.split('').reverse().join('') }}. l. M) }# i& K
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    " {3 U) q+ C1 J6 Z! t: F' e: ?
  6. </div>- U7 V( `$ c& ?- J6 q
  7.    
    9 d1 O1 b1 u/ _: |' G9 s# z$ |* j
  8. <script>
    5 g$ p1 _, U# {
  9. new Vue({
    ) i+ B3 G0 S/ ^! S9 {: J* ^  }
  10.   el: '#app',3 x2 U' U( Z/ }- U9 b" h8 Z
  11.   data: {7 N7 }5 D, }3 U1 ?; @: Z- f: Y% \6 Z
  12.     ok: true,
    ( t# U7 @9 g. X) n, P5 F
  13.     message: 'RUNOOB',! S* E5 g! U$ a$ F; g1 I! A
  14.     id : 1
    8 s% P/ N2 r7 X
  15.   }0 I( C, J# O) B
  16. })% w& E2 p, U3 S# v, m$ d% ]
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">/ I0 M5 f$ C5 g% S- `
  2.     <p v-if="seen">现在你看到我了</p>: t; D4 S3 V3 L" L
  3. </div>
    / F- `  b# o! J: ^
  4.    
    % v  R- ~$ Q/ N. s
  5. <script>7 E& N3 l, _0 V. g6 y5 ?' q. @
  6. new Vue({
    ( h, s7 ^* i( @7 ^% o/ Q
  7.   el: '#app',# r' Y  K- C) n6 X3 p, c: b
  8.   data: {
    + Q8 C2 s2 W" u! x8 V/ {
  9.     seen: true" U3 }5 _+ a" G, J/ ]
  10.   }
    2 u5 \! z# H, F+ R2 a8 {: f) X
  11. })) w! q( q$ F; V, N, a+ x
  12. </script>
复制代码

( s$ P- F% c2 a" k: x2 t
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    ! ^' x3 _2 ]8 S- a5 ^& @) p6 n
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    " c  H3 j/ U5 O7 y, Y% T, G
  3. </div>8 h& n0 X2 H7 {
  4.     3 k" ~2 [- N' y. j$ l
  5. <script>
    9 ^7 p0 c( T. \% o
  6. new Vue({6 n* {7 f3 r" G8 Q& F2 b
  7.   el: '#app',
    ) W3 {2 r8 s! U1 W/ C4 \
  8.   data: {
    # b$ ?# P$ n7 ]; A, r4 T$ R
  9.     url: 'http://www.runoob.com'
    1 D0 `5 [$ N! v, `$ H9 J
  10.   }
    7 }( u0 e9 v7 M% Y" a% N6 Y  n& i
  11. }); Q* v/ k9 Z# p' [' P/ d! S) B2 c) r
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
5 X( G( b/ h+ ^
  1. <div id="app">
      T1 y  s; ^5 A0 s( |
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>! W3 y/ [0 I$ d( ]9 d: L

  3. 0 H3 Y$ A2 t" L! }, p6 \* ?
  4. </div>
    ) {$ d" p- X7 b  g* u' P2 ^

  5. ) ^# R1 _' O& w5 c* c+ _1 A
  6. <div id="app2">
    ! C4 {2 Z, v" t! w2 i. x
  7.    <p v-for="val in arr">6 ^* k" d- {& Z6 L" j, \
  8.     {{val.a}}6 p' v& r; w& d2 ?1 K$ w
  9.    </p>
    % v& K" A1 Z1 f
  10.    <a  v-on:click="tap">点我</a>4 Q1 [4 u5 n% `) d0 g( m2 i
  11. </div>, l, \! F: f" p0 d3 G

  12. : N% C) @# g9 R) ^4 ^
  13. $ p4 k* g8 b3 A! c3 N- p! G
  14. <script>/ ]: c) H8 N, v  k! @' e( T
  15. new Vue({
    : r8 V8 v! n; M$ E: B
  16.   el: '#app',  N9 W. ?) D' |: b2 l
  17.   data: {
    7 a0 K/ ?' |' Y5 P9 _
  18.     url: 'http://www.cncml.com'
      q# t; Q6 o1 T1 k  F
  19.   }$ g+ v. y. U% f5 n* q
  20. })) n' W5 C% T' a& w. H7 V2 u6 B+ ^  {
  21. new Vue({
    $ o2 b! A/ d8 c$ Z" z8 M6 \6 E
  22.   el: '#app2',% v$ z/ f9 z  `7 J
  23.   data: {! V8 ~2 D$ I5 I- ~' Q, P
  24.     arr:[
    9 u4 h! D0 \* A# s
  25.      {a:'bb'},: C, g$ }5 |. v  y1 e. w6 }! s
  26.      {a:'cc'}
    . L$ n" s8 D) \8 b( B! X
  27.     ]0 R: f" I/ q; _6 ]( f
  28.   },9 T; _: M& i4 _) D2 }, ?; u6 }
  29.    methods:{
    # g7 o! y' A4 l, K" ^4 ?
  30.     tap : function(){  p$ q- v2 i8 |% j* [& [& c/ h% B
  31.      this.arr.unshift({a:'new'})
    - `  O0 O) F8 ~( |
  32.     }; U8 g7 Z5 E+ A( ?
  33.    }" T/ \& \4 G+ Y0 Q" I) G3 S
  34. })2 q' k/ ?9 {& p" `( K
  35. </script>
复制代码

. r; `0 N# p+ }
8 R$ G/ |$ o) j1 d. E+ x6 U
在这里参数是监听的事件名。
4 ^/ b8 J% p, X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 05:19 , Processed in 0.064890 second(s), 22 queries .

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