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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12477|回复: 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">
    0 {& R8 B/ Z1 Y) W
  2.   <p>{{ message }}</p>$ D" i- _6 y2 `1 e
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">% e/ h) C$ E5 @7 j
  2.     <div v-html="message"></div>
    8 m& T8 P: j+ X; t- z! g9 P
  3. </div>
    9 d, B% Q) U- C' x
  4.    
    7 s8 N& I( _5 m9 e
  5. <script>
    2 @9 G1 H# O0 C1 V) {
  6. new Vue({
    7 e" t, O7 w# S
  7.   el: '#app',
    ' |" T" J3 m: D6 l
  8.   data: {, r6 w* R  n0 ~  G- A* k& Z
  9.     message: '<h1>菜鸟教程</h1>'( F3 W% p: x+ c4 j' m2 a9 z
  10.   }
    # b* q* ?3 ~; `
  11. })% h1 ]# o) _% J6 \# N
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">
    1 b& ]# X8 b' e& y
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    . f# H; r2 \8 L( e8 p/ n
  3.   <br><br>9 n8 Q6 F& J& f' l. I
  4.   <div v-bind:class="{'class1': class1}">
    & _" r% W; i7 ]9 E! T- L; B
  5.     directiva v-bind:class% V# _% D9 b7 Y* N  |; d
  6.   </div>( e% m! C7 V: \' N& ~6 x" f( r" E2 ^
  7. </div>
    : T3 d6 m) C5 [: _5 d
  8.     4 q5 U" f9 [' w
  9. <script>' V4 N) O: O7 s7 e6 R+ `7 ?8 h1 I
  10. new Vue({
    ( W9 y7 [: e! Y  a& O: e
  11.     el: '#app',, Z0 ~# M1 U6 I  D! K
  12.   data:{! @1 o. T$ L; f. J2 D
  13.       class1: false; q. S% t% n. F7 H% M+ L
  14.   }
    3 {( Z+ E  i# g
  15. });
    ) L& N  [6 p; n, }
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">' I$ b0 L) V; w1 v" G/ M8 v* @4 T
  2.     {{5+5}}<br>8 q! |  f1 \- I: u) S: m
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    9 \) E$ u$ L( p" z
  4.     {{ message.split('').reverse().join('') }}# }& K% {' ]6 ~& m
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    ( z+ s* B3 C5 D2 p
  6. </div># G  S8 W8 G0 _' e- ~8 l
  7.     $ m; g* b5 \9 M5 }
  8. <script>3 {( S% C9 ^1 [1 }3 ?
  9. new Vue({
    ( R( I, w2 ~- e2 F
  10.   el: '#app',; c1 v2 q4 Z- k+ |; B6 s
  11.   data: {
    0 Y6 W7 K, X) ?& T9 L
  12.     ok: true,
    6 q6 R- Q# e, X9 f' H3 N
  13.     message: 'RUNOOB',0 P* n, @2 }3 {  v' i8 V
  14.     id : 1
    , g( ^. |; @! v0 n, |, J
  15.   }
    3 L8 U- J7 U3 V1 L; m5 Z7 T
  16. })
    ! Y% o& ^  y. y1 _5 T' y  f
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">9 p% }3 Y% S# W/ r# X& w
  2.     <p v-if="seen">现在你看到我了</p>
    # v7 U0 H* n* M1 l3 B
  3. </div>% l" c/ v9 m' ?5 P. v2 I" A
  4.    
    , c/ a: j9 t/ m, p1 I. S
  5. <script>* T5 \* `4 v  i% q
  6. new Vue({% B3 Y2 c8 }3 t( I/ [3 W9 A
  7.   el: '#app',  X; ]& w& F  U  s
  8.   data: {
    ! N5 l8 M* y! v& K( r. x/ I
  9.     seen: true! d8 P6 ^6 g6 w2 r: _' X+ @
  10.   }- z& t% z- K4 J3 s
  11. })
      z8 W6 }* k! t
  12. </script>
复制代码
/ B" U( U) r$ E9 G; i
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">
    5 o/ d  p! U$ q: a4 f' v- o
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    * v5 J/ t3 j) p, \7 |6 d2 n
  3. </div>
    ' {& J$ A0 A1 ^9 w' K
  4.    
    7 ]+ h: W5 r, f7 q2 K
  5. <script>
      {% K# `0 w+ v3 z
  6. new Vue({! s* s* Z! P( H$ H
  7.   el: '#app',7 Z( y3 c8 i8 N
  8.   data: {
    * E3 [' d  B# b0 {# W- T
  9.     url: 'http://www.runoob.com'2 U. M4 ^' F9 U9 I6 e- \% m
  10.   }, r+ j' e9 y# f3 P0 V  |2 Q$ V
  11. })
    $ B- {% r' k0 A
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码
: j$ r8 a2 u( |5 n
  1. <div id="app">' j* n7 p0 B) `5 y" N  y) R
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>
    4 \2 j. y4 y! W( `

  3.   G& _0 b/ {& c
  4. </div>9 l  P0 I5 f' i) j' s! w

  5. 9 Q9 [( j5 b' ~6 o9 L0 L' v! F
  6. <div id="app2">9 N1 d+ L% P3 g4 p: i$ ^
  7.    <p v-for="val in arr">
    6 l( C. E) N  S3 F/ _: b
  8.     {{val.a}}
    . ]3 D: L" d% Q* h4 R& y
  9.    </p>
    ( C+ W( [* w" j5 _  P2 f
  10.    <a  v-on:click="tap">点我</a># ~6 _2 \, P; c# \4 a
  11. </div>
    $ @% ]$ H: H$ j3 M: H7 H5 D

  12. - v# I& p: X/ c" x& l* {
  13. + q: L* E. @- Z
  14. <script>
    ; O) L: ?/ l. X% D" t- `6 {) P
  15. new Vue({" I2 u* p$ T/ O7 `# H' E- r0 R
  16.   el: '#app',
    % K5 i; _7 z# {/ w  J: t  _
  17.   data: {
    / D9 H) ^' B4 i/ J5 B1 d! m4 Q
  18.     url: 'http://www.cncml.com'
    . [" J5 d1 s  y( m
  19.   }
    3 y( x( j3 Y2 B1 P
  20. })
    2 z6 f  G  Z% y. H6 T$ f/ c
  21. new Vue({
    . b4 V5 P! U% Z; G; v* S
  22.   el: '#app2'," n' A% x% X+ y: ~! l
  23.   data: {
    / o! S' |: l0 P) L% ~) t0 E
  24.     arr:[% ?" t$ v! C  E: y: n& G  Y& x: \
  25.      {a:'bb'},
    8 q+ Y  E; D/ v& J
  26.      {a:'cc'}2 [' y8 O  d- v
  27.     ]
    : x3 A- h0 p) u. p% _
  28.   },
    : |' l, n+ p6 A
  29.    methods:{. y) T+ Y+ q1 F+ E* a
  30.     tap : function(){  [; h1 s9 R* |* X% l" Q' t
  31.      this.arr.unshift({a:'new'})
    - f1 D  N5 J6 x/ H' y
  32.     }" u3 X/ P) H, T: `
  33.    }. X/ m% \! k/ h* ~+ J; G: p
  34. })
    . B/ H1 t8 [5 l3 h7 Q, h
  35. </script>
复制代码

. F4 k# i& D2 z1 a. q- O
  d. \' F2 A; r' q
在这里参数是监听的事件名。

; u! Y! B5 o6 P: Y" P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 21:31 , Processed in 0.122492 second(s), 24 queries .

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