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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15177|回复: 0
打印 上一主题 下一主题

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
0 d$ w9 a" p0 @2 n' g0 W  p
  1. <div id="app">/ i" U9 s/ _- [. `+ L
  2.   <p>input 元素:</p>0 }8 O3 ^, Q! t) Q2 H# l
  3.   <input v-model="message" placeholder="编辑我……">" _6 U- s8 v* I" G6 r3 T
  4.   <p>消息是: {{ message }}</p>
    ) i. N* o$ w6 u6 H+ ]6 z
  5.    
    3 _( I6 L0 H+ e$ J# w
  6.   <p>textarea 元素:</p>
    ; G, |8 p/ g: g' |9 x; }
  7.   <p style="white-space: pre">{{ message2 }}</p>
    1 v  V8 L& t/ _1 c8 Y
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>& D# A7 m4 [; n% j
  9. </div>
    : p9 z: p- x) J

  10. # _* y+ T' r' b5 F# b2 Z
  11. <script>
    & R4 ?9 y( e) ^3 Y4 n+ ?
  12. new Vue({. s. ~" `8 N( ]; v; L" @+ I9 x4 n0 R' z
  13.   el: '#app',5 v  P# u6 w* P
  14.   data: {  ?( U5 P! L! ^/ ^2 m
  15.     message: 'Runoob',! M: Q# d2 i2 x2 F: e& j
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    * x. o: N" D4 Z
  17.   }; Y: \- W8 {$ ]; g$ @
  18. })7 S& J' x  W+ Z  ^1 s4 t  W3 P
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

" p1 Y% J+ i, d
  1. <div id="app">7 B/ @+ p/ i: T( c* M, T6 U
  2.   <p>单个复选框:</p>) I: E% @/ N& W8 J$ X
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    0 k' z" K* o( ?) u
  4.   <label for="checkbox">{{ checked }}</label>
    5 n8 J+ P" A0 }2 t9 ~* n$ O6 R
  5.    
    / h1 @4 N- e/ e( ^4 c8 |& y) C
  6.   <p>多个复选框:</p>
    # c& E7 L" y) z! b0 a; Q- c
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    ; ]" ^6 V, f* G% p1 z
  8.   <label for="runoob">Runoob</label>
    % d) D: @8 _& ?3 a
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
      K2 D. ~! Z9 F, O: E' p8 j
  10.   <label for="google">Google</label>
    # `2 u, [0 ?2 j8 F4 {- o! r8 j
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    % u" H6 N, j, a% W2 D- Z& w2 W
  12.   <label for="taobao">taobao</label>
    5 m  Z0 D8 R: J( q1 {/ b8 n
  13.   <br>
    ( Z7 R0 L, x& w4 G( v6 i
  14.   <span>选择的值为: {{ checkedNames }}</span>/ x5 t) ^7 W% O* E
  15. </div>; N7 _# J& }, Q# A1 q  z
  16. 5 _" d% I; G/ @# S; D, E1 d/ G6 i( J
  17. <script>6 X- x* S0 l. v* K" g8 m
  18. new Vue({2 ^0 ]; f4 }! i# `  O) C
  19.   el: '#app',
    5 k& a( C' P6 C( q: m9 Q
  20.   data: {# n" P% s$ }: @
  21.     checked : false,
    - v$ n# p! S6 k3 F7 B
  22.     checkedNames: []
    ; p& F1 T4 w: W
  23.   }2 N' s& K) T' _1 F
  24. })
    $ M( {, X5 F; K, r( N
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮2 L8 {  j4 m4 ~% ?6 Q
  1. <div id="app">
    4 ?6 T: m: `2 I: ~7 j5 D
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    * \" l' `/ Z  E  b0 m# O" u
  3.   <label for="runoob">Runoob</label>' D: _! w' c" b. |- T
  4.   <br>
    ; F) L: ~* P+ c! i6 X. c' t
  5.   <input type="radio" id="google" value="Google" v-model="picked">2 y+ T3 @2 e' l7 p$ S; N
  6.   <label for="google">Google</label>$ B( |* W/ e, i( J. G1 T. R# X
  7.   <br>
      h/ {# \. E' g
  8.   <span>选中值为: {{ picked }}</span>
    4 g' y1 K% L; o& R
  9. </div>1 E, p7 ?5 c3 A" J) A* ~! v  E0 Q0 X- y

  10. ' H& B) O2 P( G0 O8 X- c
  11. <script>( u# ^: S# q6 S  G% N+ ]* P8 b
  12. new Vue({
    $ v) G3 _: w/ u" b* k% d4 B; {2 K
  13.   el: '#app',
    + K) K' i( ^1 e
  14.   data: {. t" K* m2 e6 M& ^
  15.     picked : 'Runoob') ^  [6 G  @' V  J. O/ ?$ h
  16.   }& K8 k7 E! j2 \% G+ P
  17. })
    1 i% M8 N3 W; b9 U, c# k
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select; O* O: k( P& @
  1. <div id="app">. x# C0 {; ^( B2 h0 k
  2.   <select v-model="selected" name="fruit"># U: L5 w# @8 j( s: N9 m6 M
  3.     <option value="">选择一个网站</option>
    # @7 D/ `3 \8 N. U( h
  4.     <option value="www.runoob.com">Runoob</option>
    ) n& J; X9 a1 C
  5.     <option value="www.google.com">Google</option>! f! ?1 P( ^+ _! G
  6.   </select>
    " B4 g1 t' m/ o. ]3 |
  7. 1 A. p2 Z, m4 \0 }- _8 h- ^( h& `
  8.   <div id="output">+ x5 }+ t) `' l" P* f: H
  9.       选择的网站是: {{selected}}% ^8 ]" I) e  M: E! n  |: u
  10.   </div>
    % U" B6 S8 T; f1 J
  11. </div>( B" h# [# w1 O6 ^

  12. 9 g- K" _0 Z( s: I; e4 x3 p
  13. <script>; {; G7 K, `/ X6 z( a1 w
  14. new Vue({. g5 n3 H% H  k; i7 P, `
  15.   el: '#app',6 B& }( M& J/ g8 W5 T
  16.   data: {- \" O2 t1 N* {! b# U  V
  17.     selected: ''   _; L  y* K; D  w2 r8 K9 M: d
  18.   }% l' M1 q- R/ l5 s3 ], S6 {( b
  19. })
    / e4 A5 Y& \% e5 D/ K" [
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    ' D4 n3 G1 C7 I3 \% @  E" V
  2. <input v-model.lazy="msg" >
复制代码
.number
如果想自动将用户的输入值转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值:
  1. <input v-model.number="age" type="number">
复制代码
这通常很有用,因为在 type="number" 时 HTML 中输入的值也总是会返回字符串类型。
.trim
如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入:
  1. <input v-model.trim="msg">
复制代码
全选与取消全选
  1. new Vue({: t0 d- H6 D6 p$ j3 c
  2.     el: '#app',' \4 k8 D4 S; F& B
  3.     data: {
    : ]) ]+ s8 j+ V4 o6 R4 Z
  4.         checked: false,  Q6 y  f4 e3 ]4 t
  5.         checkedNames: [],
    : ?( A% n% @3 S+ n5 I
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    ( G& \( w3 |% r4 ]" A2 h
  7.     },
    ' U- q2 u7 c& n5 ^2 j
  8.     methods: {
    6 T+ j7 T: r" R; ~( S$ |
  9.         changeAllChecked: function() {4 a# p; p  b9 J! M& e
  10.             if (this.checked) {+ _) h/ l- X) ~: {+ x
  11.                 this.checkedNames = this.checkedArr3 \4 H- p# L2 q+ B7 V" O
  12.             } else {* V- R3 a2 n# R
  13.                 this.checkedNames = []3 u& i6 x- X1 ]3 C) M  P
  14.             }9 o- U% }! N; Y; S1 [
  15.         }1 Z$ a+ G* t8 q$ y
  16.     },& a! Q3 M: O" D0 i* ~& o* N
  17.     watch: {
    $ _& W# t1 Y2 M: I& B. j3 R7 L
  18.         "checkedNames": function() {! s! F3 j- u, B, w9 r
  19.             if (this.checkedNames.length == this.checkedArr.length) {: v3 Z8 p* e8 k' g& {
  20.                 this.checked = true6 P- o- v6 `. B
  21.             } else {3 \" g& \  y; K: ?: ~- C. g. @( Q
  22.                 this.checked = false  J5 y8 H" u3 N
  23.             }8 q+ d: C( y3 D/ }. k; O7 P
  24.         }$ G: T6 Z: k: P. b
  25.     }  e. b# ^5 N; s6 \! ], u1 N
  26. })
复制代码

& S, B7 X& W& I% r" S# L
" J6 M* |6 N% l6 @. j5 E  l2 y( z9 I* L
" @3 D! {$ w% T9 Q% m' }& P. u1 c$ i: ]( u
; j6 J0 N' H6 G

3 w+ W( K, c1 s9 b9 S" H9 P
0 c3 X8 ?; a+ U9 I8 j% G$ j2 B$ ?4 a, ^2 d! }: Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:45 , Processed in 0.059025 second(s), 25 queries .

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