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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:

6 c8 b$ l" Y( O3 V* |
  1. <div id="app">
    - v( j8 f6 `4 W: A/ K# W
  2.   <p>input 元素:</p>
    + j) Z0 w: W! i. E" F* y, ]
  3.   <input v-model="message" placeholder="编辑我……">
    4 ?* a3 m" m$ H$ F  Z: }' L
  4.   <p>消息是: {{ message }}</p>9 F( t9 t6 R+ E
  5.     2 Z: a, f. l7 g
  6.   <p>textarea 元素:</p>
    3 r" N" p) r! N9 t. w
  7.   <p style="white-space: pre">{{ message2 }}</p>: A, Y. P- W7 m
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>  D  l8 }1 D% x  [$ T0 f  S% _
  9. </div>
    " G9 I8 C! w* j' A! P# i
  10. % d/ s" y$ I* s  p  ?
  11. <script>& ]. R) ^' P( t
  12. new Vue({8 E% T* _7 ^! c6 O. l9 }
  13.   el: '#app',0 [% V3 R! {7 n
  14.   data: {
    : W3 P( w/ n/ q) F
  15.     message: 'Runoob',8 J7 k+ X2 }$ L' o; K+ W( e
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    ! ]8 \# q, N! `
  17.   }
    + o. H8 t+ }2 ~5 n2 G# N. P
  18. })
    / B# O2 a# X" O' k  ]3 j
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
) U$ O, D( y# N0 c! f
  1. <div id="app">
    , c- M3 q, e: ^) Y+ q' F
  2.   <p>单个复选框:</p>
    $ ~  r; @" b' |# w! [
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    $ V, w& O3 V6 _
  4.   <label for="checkbox">{{ checked }}</label>
    0 I0 J7 V2 I) U3 y# ~* h3 M* k
  5.     ! h; Y- b3 P9 U$ e% Q# c' A
  6.   <p>多个复选框:</p>
    9 @" N0 r" g% T
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    ; {: r2 i. z+ S' |/ s8 ^1 \9 O6 e
  8.   <label for="runoob">Runoob</label>  a& l. L. r6 i; j+ i( i0 P
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">9 j0 G# Z6 k- M) G
  10.   <label for="google">Google</label>
    ) j0 C# g( b, Q* Z3 @
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    ) N. l# K# y6 S% o) O0 _
  12.   <label for="taobao">taobao</label># P1 x, o" L+ @: T2 W: Q
  13.   <br>3 B+ C" i: ?: N0 @- h- E5 Q; }
  14.   <span>选择的值为: {{ checkedNames }}</span>0 ~4 u* ]! y+ E1 d2 p
  15. </div>
    % O7 C; C: @% ]0 k: D
  16. $ c6 G1 I5 ~& Y3 W4 `, ]
  17. <script>
    ( n8 Q8 h- u0 Q4 ~/ J
  18. new Vue({
    ! B, L  ]% x/ e' E, p# n
  19.   el: '#app',
    8 H' I4 V! j5 X/ U7 K5 B
  20.   data: {$ r6 ]9 h8 L* ~4 h
  21.     checked : false,/ E  d% ]# W" \# t  b/ D1 g$ W% b1 X
  22.     checkedNames: []0 ]. Z# k' X, c" z3 E) J- t
  23.   }
    9 s  R0 h; w4 y: O
  24. })
    : q; _; e: z) F: D  ]& K
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
3 f" @$ J8 A& m# x3 j) f
  1. <div id="app">+ \& Q5 r4 B0 w& a/ ]% M# W
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    # d5 F! N! m1 Y' p- e6 T
  3.   <label for="runoob">Runoob</label>
    * b- ~! H1 I" C9 X
  4.   <br>8 @+ {( ~$ p: O4 l/ A
  5.   <input type="radio" id="google" value="Google" v-model="picked">% q4 A% A9 Q7 I1 P" p
  6.   <label for="google">Google</label>+ l! M7 V. M" K! I8 K7 x1 T
  7.   <br>, u  g$ ]0 C( G; t8 q9 i
  8.   <span>选中值为: {{ picked }}</span>$ w/ o& v7 u+ T/ v4 v5 u
  9. </div>
    * e- @4 s$ t! r8 d' B# W  ]2 D
  10. 3 q/ [- ]" X# y6 F7 |1 W
  11. <script>5 U! z1 f) s5 @
  12. new Vue({
    ( ?' V% c, _# V! z' R, t) i8 E- \0 j9 O
  13.   el: '#app',
    # l2 w( t- v% T0 n# o, q; |3 }
  14.   data: {
    ; w' d7 s/ K7 T: Y0 S) P
  15.     picked : 'Runoob'2 V' j& o) q3 x' t7 P, G  H
  16.   }; L* g7 c. K/ ^1 g/ M" C. T
  17. })
    - L. {2 L8 ^6 c$ k, G8 W
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
: n+ Z5 |+ a8 u: G0 C
  1. <div id="app">
    # Q  {; S. Z7 s% I+ N/ Q: M
  2.   <select v-model="selected" name="fruit">  O! @: U( s% p3 R
  3.     <option value="">选择一个网站</option>! q! R) ]$ W  y
  4.     <option value="www.runoob.com">Runoob</option>' Y6 ~  ]/ O# @- W% A6 w3 K
  5.     <option value="www.google.com">Google</option>
    ' |+ \; K# J2 P2 h8 F) k
  6.   </select>
    : f: C8 k1 \/ v/ g2 J9 L; F

  7. & S! i" T, [+ ?6 f: H
  8.   <div id="output">: t" G* f- }2 ~& `) E
  9.       选择的网站是: {{selected}}
    0 b6 W" y# c% \6 d
  10.   </div>
    0 ?3 j! f, n9 p' @. M0 O! P9 H: }
  11. </div>0 ?$ `! |- `, A1 M
  12. ! d1 d5 t7 B0 o  E$ R2 x& }3 K( d
  13. <script>! T4 W2 t5 `, m3 v! z
  14. new Vue({
    2 f9 m  G9 r2 H& G
  15.   el: '#app',
    % I0 T: R6 ~9 z. [* H7 m! m
  16.   data: {
    ' S" o% b: V! S
  17.     selected: '' # j* W0 b/ j3 {  O* C
  18.   }$ ]' t5 d  y  R2 w6 d8 w
  19. })7 K9 M6 u: t4 Y* `; [
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->5 `2 b" ]0 x$ N$ `! V" c
  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({; f5 w  C4 ~) N0 `! O: w
  2.     el: '#app',
    - J! E; t4 h$ r: B, k
  3.     data: {; ?7 H) a/ Q  v) ]( \& `" @
  4.         checked: false,
    1 E$ Y* W' T2 \+ N" P
  5.         checkedNames: [],
    * k  J3 `0 E3 n! A! P# {
  6.         checkedArr: ["Runoob", "Taobao", "Google"]/ d0 C6 m: N, _( T
  7.     },
    + K; G) Y( Z3 e
  8.     methods: {6 a& U7 M) W* ]. Y9 X# h: k
  9.         changeAllChecked: function() {
    9 X! }) ]1 F& @  a
  10.             if (this.checked) {
    . l7 [! q- d% o! p7 y$ Q3 ]
  11.                 this.checkedNames = this.checkedArr
      m& e1 S, |7 q9 R+ t( f& [5 D
  12.             } else {
    # V$ V4 s. h* I9 B; z7 S0 e
  13.                 this.checkedNames = []; g' E' |; q! H7 ]
  14.             }
    4 x' k7 E0 g( T+ y, Z
  15.         }
    8 W9 I0 I, W( Z; b# o$ B
  16.     },
    ( ]4 }0 K$ Y# v3 n
  17.     watch: {
    * H/ C1 q+ {/ K& R: e
  18.         "checkedNames": function() {3 R& }1 ^5 q+ e8 H. ^
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    9 X1 a- U: W% o
  20.                 this.checked = true+ N9 T. W+ i! {- @0 `0 i
  21.             } else {
    3 y9 V* R2 `) q/ o
  22.                 this.checked = false. q2 t1 l: k: r2 J" U  _
  23.             }7 u$ ?: Q' W: _2 Z9 l
  24.         }4 m/ K) G8 k. v0 M5 D3 C" H
  25.     }
    0 J$ p/ K7 S7 {1 T2 i: [# {
  26. })
复制代码
% K) g$ z9 S& D! q

3 g4 q$ ~2 b' C6 a8 |/ L$ t7 k% o+ n4 M9 t" ~/ d6 y0 P
0 b8 w9 ?% P5 @4 E: L8 A! s& B

- x; u: Z2 a7 A; |! L
+ y2 Z' ^  c# y8 b+ X  U& O% {' s, ~) f1 O4 m- V5 J/ w% M) D
# r3 g3 z6 j/ I5 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:36 , Processed in 0.078724 second(s), 23 queries .

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