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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11675|回复: 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">/ j  C& F4 n1 J! f
  2.   <p>{{ message }}</p>4 ]: F! T* |0 N2 \! c* j! v
  3. </div>
复制代码
Html
使用 v-html 指令用于输出 html 代码:
  1. <div id="app">
    7 B* z, \* e* A/ p3 x  Z- o
  2.     <div v-html="message"></div>
    $ F& `8 w( z$ w& F0 T# u/ i# W
  3. </div>  u6 ?% u# t: S, T
  4.     ; h/ S2 |6 o* Y
  5. <script>& w) M2 o" P9 a" n+ z3 x
  6. new Vue({
    % i8 k' D. `5 C) b6 N7 e
  7.   el: '#app',
    * o" `- P  ~( ]
  8.   data: {, ^9 _" A8 Z, ?/ b2 G  R- [
  9.     message: '<h1>菜鸟教程</h1>'
    / s# y: X2 m% l
  10.   }
    . M* Q( R7 G5 Q( a
  11. }), S% l4 S$ r+ ?) H  k) H/ Q2 Y
  12. </script>
复制代码
属性
HTML 属性中的值应使用 v-bind 指令。
以下实例判断 class1 的值,如果为 true 使用 class1 类的样式,否则不使用该类:
  1. <div id="app">2 i2 h$ O4 U9 h( ?
  2.   <label for="r1">修改颜色</label><input type="checkbox" v-model="class1" id="r1">
    8 k' y% e: f4 H# U
  3.   <br><br>8 }; ~" f, X8 F
  4.   <div v-bind:class="{'class1': class1}">
    ! C1 L5 d+ _0 n4 ^. w3 e
  5.     directiva v-bind:class
    9 M# J1 H! G7 \1 n' I
  6.   </div>
    / u4 f" a5 b# H3 a. Y
  7. </div>1 f' {( S8 t* v* k% A
  8.     : {6 F2 p0 C( L* i6 F5 V. G
  9. <script>
    ' v+ K( T- K5 t: p
  10. new Vue({* t6 E, V' k8 o( i& Z( R
  11.     el: '#app',) `; _; H: p: c5 x% D9 W
  12.   data:{
    2 q9 p  H* H  a. n6 p
  13.       class1: false
    $ ]0 w. Q& }1 z# L- H2 v' g5 L4 s; S
  14.   }% O6 i5 o4 }) v7 P$ R9 n
  15. });! ?8 X  r2 z: i
  16. </script>
复制代码
表达式
Vue.js 都提供了完全的 JavaScript 表达式支持。
  1. <div id="app">* M& i& ~$ N. G; [3 w) y3 r
  2.     {{5+5}}<br>
    4 }$ ]& V4 C0 w! R! O
  3.     {{ ok ? 'YES' : 'NO' }}<br>
    2 I5 }; p1 d. G& z& [' }
  4.     {{ message.split('').reverse().join('') }}
    " h5 T' H3 B) |: k
  5.     <div v-bind:id="'list-' + id">菜鸟教程</div>
    5 P; ^3 X4 Q( E
  6. </div>
    ; s' b- Y5 h7 R9 x# ^+ _
  7.     $ t, T5 \6 C% L! r/ f/ ~" j* X
  8. <script>
    0 t& ^; l% T  N; h7 a8 L
  9. new Vue({* ^- H9 ^- a  m2 S- a0 [
  10.   el: '#app',
      |% \6 h0 s  J) `, L
  11.   data: {* B; m  R7 y( k- Q# m8 m  S) ~( E; Q7 W
  12.     ok: true,$ q1 d' t- G" \( d( Z
  13.     message: 'RUNOOB',& H, F7 d9 u; l7 ^3 f
  14.     id : 1
      }- b% a0 {) H8 w
  15.   }. F" k/ y: m+ D
  16. })+ e5 {2 ]  z& t- i" t
  17. </script>
复制代码
指令
指令是带有 v- 前缀的特殊属性。
指令用于在表达式的值改变时,将某些行为应用到 DOM 上。如下例子:
  1. <div id="app">
    2 F* s* n' Z+ j$ f' F6 e7 S
  2.     <p v-if="seen">现在你看到我了</p>
    ' j& V/ y. S6 P( X! v! A" W% ?
  3. </div>+ e% t% B& _& j( |, ^8 N2 S
  4.     , X; t6 C- w. E% v% `
  5. <script>) e3 ]: d& s9 z6 k
  6. new Vue({: J0 y3 N9 h4 w% K
  7.   el: '#app',
    / R% B+ b" Y7 l# H: ^/ r7 ~+ o
  8.   data: {7 P1 a8 C6 @. s; k
  9.     seen: true
    ; Z9 y/ j1 F/ B
  10.   }8 O4 a+ o8 g( W6 Y9 ^
  11. })2 V2 f) l% f* x# n$ l, @" O4 }0 K
  12. </script>
复制代码
3 O1 Y; v; u8 ]
这里, v-if 指令将根据表达式 seen 的值(true 或 false )来决定是否插入 p 元素。
参数
参数在指令后以冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:
  1. <div id="app">; C: n, L# H$ H0 x8 i
  2.     <pre><a v-bind:href="url">菜鸟教程</a></pre>) \2 `* a3 e. S( {2 o
  3. </div>, X: x' [: `: {7 a
  4.    
    ; a6 p2 ^3 U/ z6 q& K
  5. <script>6 i$ f& O3 R2 j% E/ p
  6. new Vue({
    . m, p, S* a" T% t' ?
  7.   el: '#app',
    $ L6 U3 D1 J, U
  8.   data: {6 s0 D5 f5 ^( [$ v& [
  9.     url: 'http://www.runoob.com'
    4 o# h. |# b8 O" w6 x! q
  10.   }
    . [# v* v( Z/ V8 r7 w6 M
  11. })  p8 l% E- |4 g) m/ p
  12. </script>
复制代码
在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
另一个例子是 v-on 指令,它用于监听 DOM 事件:
  1. <a v-on:click="doSomething">
复制代码

8 u4 q9 b- u& L) k' ^9 I
  1. <div id="app">
    ; ^  e( Z9 g/ ~3 A- H! U- e
  2.     <pre><a v-bind:href="url">Vue参数</a></pre>& a3 i5 U* r, I8 G5 P5 W* ?. Z" h; X2 @

  3. * I$ G( Z! g/ T3 m/ l8 ^
  4. </div>7 x# S" T& _; c% N- c( ~' W

  5. 0 H: {* z0 g# ~. U7 {$ h* V; _/ D; U
  6. <div id="app2">- g* G9 g$ ~% ~) _* b
  7.    <p v-for="val in arr">
    2 f$ L+ B; I1 c9 G4 |' _$ F) |
  8.     {{val.a}}1 ]) C) C% K4 _+ u
  9.    </p>$ O$ T8 |& r& g& u* [: d9 w
  10.    <a  v-on:click="tap">点我</a>; _8 j7 o7 C1 |1 W
  11. </div>
    8 {! t, o( S5 u

  12. ; I3 c- m( l; F' q1 I

  13. 4 ~7 U+ W* `$ V- i8 b5 n4 S
  14. <script>
    9 c: M# c, }( C) f2 V
  15. new Vue({
    ; T/ D) P, A4 w6 k# r
  16.   el: '#app',
    ) m( W' q; {: |/ r
  17.   data: {1 ~6 |3 U6 t4 E# a
  18.     url: 'http://www.cncml.com'
    8 t& f1 ?3 z. _, Q
  19.   }8 \0 N5 r9 E3 q  t/ O
  20. })! u4 b+ t2 m$ F8 M, u$ c" D
  21. new Vue({& @; C5 R/ j! s+ D7 }
  22.   el: '#app2',: z- m! y+ b$ O5 V8 o
  23.   data: {
      L+ i5 j2 T1 ?/ N' p3 Z0 J
  24.     arr:[
    2 G* T4 o6 f& H8 m+ H
  25.      {a:'bb'},1 J$ s" p1 l  E1 A1 n
  26.      {a:'cc'}* k/ V; O: f! k
  27.     ]) I; e5 b/ D; N& F3 t
  28.   },
    " |9 L/ c' J" x. ?( \3 ]4 S
  29.    methods:{  A7 k3 U) k' A" O7 D! |# e& y3 b
  30.     tap : function(){
    ' S5 Z( u& y4 ?1 v4 u
  31.      this.arr.unshift({a:'new'})+ V4 X, J; u9 ^/ a2 q; T, G. L
  32.     }
      r! g" b- L4 W5 p$ W0 |5 ^
  33.    }$ z; \9 r+ {0 p. f) y8 N1 n' W
  34. })
    6 n; P; K+ _/ P
  35. </script>
复制代码
% q6 U* u+ O  H6 B: z

5 s! N! m/ w7 `% l
在这里参数是监听的事件名。
9 b0 a& u/ j2 S) c/ y5 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-9-28 06:37 , Processed in 0.127592 second(s), 23 queries .

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