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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
: f9 _! f1 g; F
  1. <div id="app">! p) ^$ x% @6 C0 a. L, V
  2.   <p>input 元素:</p>
    ) q6 C0 H7 A( V7 Z/ `
  3.   <input v-model="message" placeholder="编辑我……">4 n& E% e, K  p; I2 F9 L9 F; T6 m
  4.   <p>消息是: {{ message }}</p>1 Y4 x$ |5 ], b7 V
  5.     - @3 y. T) e6 U) |" h
  6.   <p>textarea 元素:</p>
    / [* \$ V' `1 ~% @) W) |3 B3 Z/ k
  7.   <p style="white-space: pre">{{ message2 }}</p>
    $ ^( _, k' |  ^
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
      \) P$ G9 ?, ]1 L
  9. </div>5 y" W6 ^' u  Y1 T$ K0 h. ?

  10. " W# J! ^( R: r; ~4 v
  11. <script>4 }2 F4 d3 w/ X8 o3 u2 D9 i) E
  12. new Vue({3 r& x+ l- ]( l7 ?9 q" m
  13.   el: '#app',
    ; d+ a" |4 q0 M3 b! O% Q
  14.   data: {
    ; K' U: b( [$ A0 h7 l; L
  15.     message: 'Runoob',
    + Z. q7 U: v% ^: L* ^+ _
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    % S' d3 N% |( a$ T5 V- @
  17.   }
    6 T/ O9 ?1 g1 h. o1 V$ t
  18. })! w4 j4 [$ k! \5 S9 R0 r
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
* @7 p% P1 l4 N
  1. <div id="app">3 F. W1 h: N+ C% l1 _+ [
  2.   <p>单个复选框:</p>
    : G) D4 }. S* ]8 E- s( l0 y0 Z: E# M, V
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    4 }, i8 @$ U  F4 i1 S% C. M
  4.   <label for="checkbox">{{ checked }}</label>4 d3 B, ?+ C+ Z& V1 u
  5.     & m; X$ p# Z# ^" R6 T
  6.   <p>多个复选框:</p>
      m! D+ r6 D8 s1 }" F) Q
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    : j8 Z& E$ w9 y) [, ]% E
  8.   <label for="runoob">Runoob</label>; B" t4 j: l4 a8 r2 e
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">+ H3 k7 k9 b5 M0 M* m
  10.   <label for="google">Google</label>3 D/ h) u5 y" l8 g3 u, [
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    & p4 S0 f- y, t
  12.   <label for="taobao">taobao</label>, U! ~% B. W& B! t1 c' z) h  K
  13.   <br>
    5 v* {+ o  S$ Z! s. {4 W7 a
  14.   <span>选择的值为: {{ checkedNames }}</span>
    " b: X' `- a! d
  15. </div>) w1 V* V! r9 \9 ~8 R! u! n5 G5 F& ^
  16. ! V: U& X) M4 d
  17. <script>
    8 H! c7 z0 e$ \& Q
  18. new Vue({; E8 I5 _$ L  N/ X; h7 n5 m4 K
  19.   el: '#app',
    # n! ~, C/ c- n
  20.   data: {$ m& n, a8 c1 d
  21.     checked : false,
    . ]2 q! ]2 N$ |
  22.     checkedNames: []: @& G: k% y9 z5 a0 m: @
  23.   }4 ?- s  m# v9 [2 _5 U- J
  24. }); I( N/ {0 Z4 g. y5 \! w  `
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
4 V  r- _3 i# r: M
  1. <div id="app">0 j4 o' P' f  @
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    6 V0 M1 I1 K; [
  3.   <label for="runoob">Runoob</label>& {  F  x" l3 Z( v8 a
  4.   <br>
    ! `3 Z4 @8 i- u/ [% o$ w; D6 q8 a1 q
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    ( ?; M& E& Q" f# ~' ~/ [
  6.   <label for="google">Google</label>3 U0 ^) E8 h' d' j# N
  7.   <br>0 T$ w4 _$ t7 v5 z9 f
  8.   <span>选中值为: {{ picked }}</span>. O! m# q  L% k1 L; q, ~0 ~
  9. </div>
    ' l% }4 d7 q7 F  E% \
  10. & Q. R( |; b4 @
  11. <script>% t2 O4 _* l5 p3 ^
  12. new Vue({5 n7 I( N+ g4 F
  13.   el: '#app',9 u# z" r& X; h& W! g; \
  14.   data: {3 t$ ]* N% W6 N3 r# c
  15.     picked : 'Runoob'% ?3 D4 x; J+ {
  16.   }& k5 q4 a( I2 L7 I* f1 }. ?8 j
  17. })
    - Z0 p: w: \% h2 |, _
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
3 X% F; Y5 l; f
  1. <div id="app">& M+ A. [& d% K, _1 t1 g4 b/ C
  2.   <select v-model="selected" name="fruit">
    5 U4 e, U6 h7 C8 B) Y# D
  3.     <option value="">选择一个网站</option>) z) i( b' i: l1 _' E9 p
  4.     <option value="www.runoob.com">Runoob</option>* ?0 N+ }( {7 u5 G6 K- \. Q; v
  5.     <option value="www.google.com">Google</option>
    5 }' R5 j2 p8 N# p; c- m
  6.   </select>
    % x$ d1 @7 M8 J# O7 D( y  B7 q  B
  7. 6 d% K, ~1 W# a3 H& \( g- S
  8.   <div id="output">/ S. X$ a5 o, h7 y' ?6 m
  9.       选择的网站是: {{selected}}
    ! Z, y( x1 K0 U* b& W
  10.   </div>' H' Y2 B# S; ?$ O% x
  11. </div>
    7 Q* h! z" ?6 p+ z- ?

  12. . D& ?7 V, q$ o3 ^0 c
  13. <script>: Z0 x9 R; M& X5 }
  14. new Vue({* n" c( A2 x9 z- N
  15.   el: '#app',
    5 ]% q, N( M7 }+ p  J, u
  16.   data: {# S, O6 Q: M# {. ], \2 A
  17.     selected: '' # I. {$ I& F: i. L  G/ ^, a
  18.   }
    7 r3 y( P  N& n  P
  19. })
    ' W  ]3 A8 D. T7 S% j3 q* g; B, g
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    ; K3 i) f% A" u- @( D
  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({
    5 j1 @5 l# {( M9 @, x
  2.     el: '#app',
    9 ^/ W) p8 N( K
  3.     data: {
    0 h4 ]) i1 ?* G6 `  T) d# p" y0 q
  4.         checked: false,
    6 w9 n$ s, e3 d8 P
  5.         checkedNames: [],
    + H/ z2 ?' b+ }% [# p+ S1 C
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    * K' p  O/ H7 Z8 ~- a" a2 P* I1 U1 ?
  7.     },
    " G+ y8 z) U# s* h9 F( a
  8.     methods: {
      y7 J* S7 Y/ V  @( M
  9.         changeAllChecked: function() {8 A- [, A) v5 Q. l9 E, ~+ J
  10.             if (this.checked) {
    $ N! D% X1 `8 ?& _
  11.                 this.checkedNames = this.checkedArr
    $ n- ^5 j5 n: `
  12.             } else {; d5 q) V  j% P, @/ b7 \4 m- Y
  13.                 this.checkedNames = []
    # X6 c, b, C8 u
  14.             }) D" b2 ?$ E1 N& W! t
  15.         }- d: @- k+ P7 i3 q3 ~3 c0 K) K
  16.     },6 ]! {$ @3 X/ v) R- Q0 F8 F
  17.     watch: {9 W! U$ k9 p$ q/ U; |9 S9 y
  18.         "checkedNames": function() {3 p" j" [& ]! k1 B* A( p. z
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    , o9 Y0 f. a* p; {- P5 ?" P; ^/ {
  20.                 this.checked = true
    7 S; {7 Z# L0 A1 C1 {
  21.             } else {
    ; c& S& _- ], h
  22.                 this.checked = false* u* I- L: g- e# W7 P7 w$ N
  23.             }- N, B- u8 y5 g1 S
  24.         }% r6 n( G# Q/ p5 N+ H
  25.     }
    , |' Z3 k2 o! R+ u. _) K2 K( n
  26. })
复制代码
1 d2 F0 v( S! c. d+ G  ]

7 M! u4 g( ~4 l$ m  D- C9 f6 m( b/ P6 O

3 x- E- [1 X8 T3 @
& N: q! d6 Q+ [3 w1 Z. t$ q+ q$ L6 C; k) O  \  y3 ^4 g

+ _$ I9 L$ n- Y# `: L; W2 c  K; @# Z2 p. p1 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 17:25 , Processed in 0.160212 second(s), 25 queries .

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