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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10826|回复: 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">- p6 q, j& }1 J( Y& G
  2.   <p>{{ message }}</p>% q+ a: K- C( B1 @
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    % M' D( T* ^7 y+ o
  2.     <div v-html="message"></div>
    9 K) Y; a- u/ i# z5 ?' [8 k0 S
  3. </div>6 K+ Z- O6 x) p1 z) n$ o7 n6 M
  4.    
    ( Y" E* e2 x$ W) O
  5. <script>/ j9 z0 i) e" A3 C) \
  6. new Vue({
    + q, y7 a7 M: h6 k2 V
  7.   el: '#app',
    * B( \7 b' q: O: |4 m: t1 g
  8.   data: {  [; I  K" D  G! U2 X
  9.     message: '<h1>菜鸟教程</h1>'1 u! ?* d( P1 Q$ b
  10.   }( X/ a. D' v! b# ~/ q# R8 x  ]
  11. })
    4 H2 D  {4 x: Q4 {% J
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">  w. a6 ]- \$ K, |6 {- ?' x  i
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">* L4 R  J/ c9 |9 P+ l; _
  3.   <br><br>
    9 d) Q* F, S0 T9 g- S. S% `) l
  4.   <div v-bind:class="{'class1': class1}">- v( G& e4 K4 U% {
  5.     directiva v-bind:class
    0 T! J: r# \! A9 |
  6.   </div>8 O5 C/ c, \2 c5 ~$ [
  7. </div>
      ^+ N! ~7 J" d7 f; S& {1 _
  8.     + _$ N" _. s+ M+ N% I- |! }
  9. <script>  s2 g( i' Q% t4 L! {4 R" \
  10. new Vue({$ v8 _: H9 `" F3 c( R) A# O
  11.     el: '#app',
    2 ]1 ?% g* j! k1 m$ T7 \0 S
  12.   data:{" B3 W- {- x1 G- p4 V0 e4 `9 t
  13.       class1: false6 h7 m, @, o/ \* m  e
  14.   }+ B+ z, ~' |; @) o& |/ M, Z
  15. });
      j! t% p: r1 V% q
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">% l$ F& ~4 q0 E4 o# K6 x$ j& T
  2.     {{5+5}}<br>- v) D. ^. P% @# D$ A2 g
  3.     {{ ok ? 'YES' : 'NO' }}<br># {$ q6 f) I3 `; [! U! P
  4.     {{ message.split('').reverse().join('') }}5 N5 d' c5 v- ]! b, u# E  t
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
      `( G' r  }/ o  E; ?6 d( k$ f8 Q
  6. </div>0 T! i& }% H1 A  s: x/ L& Q
  7.    
    % R0 l8 |1 @& X& w/ ?) y
  8. <script>) h: G" }- Z( w" A( v
  9. new Vue({4 y( u1 t1 {! }
  10.   el: '#app',1 L. `: I% R* s  \3 Q
  11.   data: {
    ; \) X, [, y! g3 r; C/ D6 ]
  12.     ok: true,
    2 ~2 u" D6 _- c4 ]
  13.     message: 'RUNOOB',
    & c2 |- P/ i0 ]% ?. ~" R
  14.     id : 1% y! I1 J- n/ j9 @
  15.   }1 p( H/ {, ?* w2 d
  16. })- U6 Z& F( Z5 ~5 D4 }2 u- G% u8 u
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    3 g% T8 p% f, n/ t" W% o9 f: d9 }- q
  2.     <p v-if="seen">现在你看到我了</p>
    7 Y2 v5 I1 a1 o' J5 F, ]; M: R
  3. </div>
    " A9 p; Q! ]! W7 r. K0 v* \
  4.     . l# x  K: ?7 \5 H6 {3 b9 C
  5. <script>
    , F9 W4 ~5 Z% a$ M/ C- B( X" g9 s
  6. new Vue({
    / ~3 `5 e; V0 N" E& A. u
  7.   el: '#app',8 ^+ i/ h! Z1 U' K8 V3 `
  8.   data: {
    # D: f. O: K# J
  9.     seen: true
    0 H% G" L; B7 k  Q0 f" _' C! q
  10.   }9 K+ L4 j6 X" n. Y
  11. })
    ; H/ U+ Z5 _+ `/ G: }- Y- b. `
  12. </script>
复制代码

; Y5 J" v4 ?7 x( ]- s" x
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">! I4 }0 |  \9 I
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>
    . m1 P, U4 p, j; T2 ]
  3. </div>
    . ?+ y7 f1 [" Q/ f: W
  4.     9 j+ z2 [. h; s* \, d. x0 g
  5. <script>
    % x  u+ `, q+ Y
  6. new Vue({
    5 J0 }! w: I+ m0 e1 c# t
  7.   el: '#app',, z3 I5 q: C8 c& i
  8.   data: {
    ' @* }1 `  V: a5 X* m- \
  9.     url: 'http://www.runoob.com'( S% a, m' g: o# H+ h3 g! _3 B
  10.   }
    ' {! Y- d4 J. I1 z# z5 w( \
  11. })' A3 x# g8 R; U1 Z1 {
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

. n' c8 V& m% ~
  1. <div id="app">/ z4 R; a; N4 l; a' Y
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>. p) x! Y1 ]# h! z1 @! _. N. V

  3. & Q9 ?! J& \; g$ j# l7 B5 G
  4. </div>" n( ^, Y: D+ p5 Z

  5. / F) ^% U+ Q, a# u! o0 L
  6. <div id="app2">
    7 |. v$ G- Y* B
  7.    <p v-for="val in arr">  c2 o* v# F" B. S+ h# |* T8 k& o. l
  8.     {{val.a}}8 |1 c) n. I2 ]; D, `
  9.    </p>  {- [1 {+ J% Q% L& ~/ b& ^
  10.    <a  v-on:click="tap">点我</a>
    " U7 y4 a5 b3 J0 k
  11. </div>
    * c8 ]2 l( f- ?

  12. + A( ~# D* V1 t7 z! o( d

  13. " a% `  A# G( @; ~
  14. <script>
    3 R. n  C% t9 O# A9 P/ s
  15. new Vue({
    3 [# {8 H- ]# }4 g
  16.   el: '#app',
    ! W$ ~5 {6 X3 n7 |" `0 \9 q
  17.   data: {& h( y# @; @# W5 s! S$ d) P
  18.     url: 'http://www.cncml.com'/ o& b% v. m2 x* W
  19.   }
    3 e) f- a$ W: A0 ?  x$ Z% t
  20. })3 i* Y, R' s' u
  21. new Vue({
    9 I0 x. k" V2 ]9 L
  22.   el: '#app2',/ Y. p& h3 x- B' S- E- h4 y* m
  23.   data: {
    $ |6 t5 f/ R1 P! I3 X5 O
  24.     arr:[" U+ U" z# H2 J2 `2 ?
  25.      {a:'bb'},
    ( V- t& H3 r/ N+ h
  26.      {a:'cc'}
    & H2 g) s" E4 {" _
  27.     ]
    ) P* B! ^1 _# Q) z; O. ?1 ]
  28.   },- _& h  G/ X. P# L) l
  29.    methods:{( @. R$ s* v3 j/ F9 w) u
  30.     tap : function(){4 r7 H- |3 n% Z+ v( B4 e
  31.      this.arr.unshift({a:'new'})0 \/ c5 _. N# p2 a( o$ N
  32.     }
    ; |5 P3 \6 U. B6 }4 `; ~
  33.    }
    5 ~) o. s8 e1 C. I4 O0 S
  34. }). d1 V$ i. o/ K4 h
  35. </script>
复制代码

! _* v7 L" w/ d: [
/ G  r/ D; T" G* c
在这里参数是监听的事件名。
1 L2 I6 H4 W0 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 23:31 , Processed in 0.118030 second(s), 24 queries .

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