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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

7 @: X4 E* A) C8 {& Z
  1. <div id="app">8 i+ m4 R% j' P- q3 p. Y
  2.   <p>input 元素:</p>
    7 V( z: a9 [, n* s6 e$ Z
  3.   <input v-model="message" placeholder="编辑我……">
    ! }: w7 Z% y, h- H( H- w9 B
  4.   <p>消息是: {{ message }}</p>3 e$ I. Q/ a: L* O
  5.    
    * B$ o9 j& M& k4 M2 E5 m* U0 }
  6.   <p>textarea 元素:</p>
    / s* z9 c8 v2 @$ s' U$ l
  7.   <p style="white-space: pre">{{ message2 }}</p>6 S) j; n9 l) }: r  j
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>7 N/ j1 D) a! F& T
  9. </div>
    " G1 {# o" p4 ?/ q+ }) g4 v

  10. + P+ e3 r$ O$ [; q( `
  11. <script>$ |$ M+ S3 u  P$ ]
  12. new Vue({
    # C; d$ A% E# R! _! s4 F
  13.   el: '#app',) E! `0 V4 l$ R) g" i5 j
  14.   data: {0 J0 s" I- i1 U' u7 {2 j
  15.     message: 'Runoob',. p! x3 U0 u8 E6 D- w: H
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    % v4 ~# f! Z$ ~
  17.   }
    0 D, r* ^8 j' l
  18. })
    9 v: P0 _3 _' X& V% E1 c0 J
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
: i$ f4 l  S. m' J
  1. <div id="app">
    + [4 L& y5 Z& F' ?+ Z: J- ], K
  2.   <p>单个复选框:</p>
    " B9 `& r. U' o8 K7 l" y/ H4 T
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    ; ]: K# _1 q0 x, u5 N* H
  4.   <label for="checkbox">{{ checked }}</label>
      K; ~0 Y& I2 ?, x# ^  {( L3 K
  5.     ( L: ]7 ^, J5 d7 S7 U, F( V0 A4 x" Z4 A
  6.   <p>多个复选框:</p>
    / \8 w6 P7 N& ?# _* Y5 e# D
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    - L+ P/ ^8 j! K; C' l3 r, @3 h
  8.   <label for="runoob">Runoob</label>, a0 u& v, P1 @" v. K/ s' R! B& {$ N
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">. {& @& q" B  Y/ k+ E. C
  10.   <label for="google">Google</label>
    ( ?- E7 P: [' h
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">  J- m2 p" A9 I' M! ]+ D3 G
  12.   <label for="taobao">taobao</label>9 k5 \7 g4 J2 b4 D4 h! D7 L
  13.   <br>% C0 w' g! ~* \$ _9 c7 ^1 @+ \
  14.   <span>选择的值为: {{ checkedNames }}</span>$ C8 X. K) ^% L/ u8 T
  15. </div>' L, i. W9 ]6 x* W3 X3 ]
  16. - ]$ w  m. o' |) r  Y
  17. <script>
    7 t! r/ `1 z" Q" O6 M$ H
  18. new Vue({& k4 B: Y9 O: b* [9 G, s
  19.   el: '#app',
    + |6 X9 s! \; l2 p6 D$ y
  20.   data: {* n3 r& |" o# d) c. V  I/ A
  21.     checked : false,# N, x" i* u8 |  X2 `( g7 x/ m. Q
  22.     checkedNames: []
    7 @) ^5 k, `% t' X5 a5 Q; ]
  23.   }
    ! B* a, P2 O6 y0 z7 k
  24. })) v. y% F6 }- B
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮% m) K2 O; k. W$ D) [; z
  1. <div id="app">' [- N8 e: `/ n
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    ! m5 t* ^+ v' p6 h$ h# X
  3.   <label for="runoob">Runoob</label># I& f! R& ^3 y7 e0 d$ t
  4.   <br>: N; D& ~# f1 C
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    7 d6 b7 C) h7 x" B( P8 I
  6.   <label for="google">Google</label>
    - f) |( ^6 k/ W7 S) h( h! J
  7.   <br>
    ( p7 R( @( @4 E- M$ `7 }! M
  8.   <span>选中值为: {{ picked }}</span>
    " T0 G2 y7 @3 r- b6 X2 y
  9. </div>
    4 i  z! j: K5 ?  f5 X$ m
  10. 8 J4 C8 T3 \$ y$ |
  11. <script>
    3 c0 W. E1 U, b5 E' S& M
  12. new Vue({; l! g. I, b" |( O
  13.   el: '#app',  q7 Q( Z5 k' ?
  14.   data: {/ _# J; M0 F/ M/ q. I3 X2 T
  15.     picked : 'Runoob'+ y7 c; T# b2 t  Q- y; I
  16.   }
    2 l7 T+ ?  l+ |" q0 O4 _* Z
  17. })
    ; f9 j8 B4 _2 O+ a! d8 R2 X
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select) G; S  h; p' e' ^0 b; {
  1. <div id="app">5 _2 O8 Y6 b! ^8 x) G5 d: s) E9 L
  2.   <select v-model="selected" name="fruit">
    . {, B+ k: ~- {2 @1 \' W" s
  3.     <option value="">选择一个网站</option>9 [, E9 D( f- X4 O& G) z
  4.     <option value="www.runoob.com">Runoob</option>
    ! `4 I& Z% f3 w$ g: k8 d
  5.     <option value="www.google.com">Google</option>& @3 u. v8 I6 ]4 a! ^& b
  6.   </select>! p8 U" j6 Y6 R; N
  7. 1 r# y% p! y  {3 \! P5 J( Q' {
  8.   <div id="output">/ ^3 V( O: B* x# N/ v! K
  9.       选择的网站是: {{selected}}7 ]% ]. v5 X( b0 C& B9 `! d  U! K
  10.   </div>0 _$ W& p) J  t3 S: D4 O! `: O
  11. </div># C  U9 W1 j) X" N

  12. . F! `9 u* K- P. |
  13. <script>
    / n2 U# [6 ^( r% J& U3 @
  14. new Vue({
    ' L8 J' a) a9 z5 K8 U$ r* Y% u
  15.   el: '#app',
    & R. r+ m3 O% }) \  _  \
  16.   data: {
    ( Q0 q- H) \$ F2 B" X" e
  17.     selected: ''
    # B% D% O# T2 ?" D
  18.   }# I6 ~9 `+ [/ r# G' H! j
  19. })* i$ N/ [( Y& \0 ^: a4 A+ }4 N
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    7 x- k$ @  Z# y* V7 y' B) C) j
  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({9 S" e4 ]' o; n& A1 U, V
  2.     el: '#app',8 u1 k4 u; i) T: a
  3.     data: {
    3 X4 A+ x8 }3 z7 O# t) e
  4.         checked: false,. Z8 k: b, q; `' ?6 `4 ?2 E) D
  5.         checkedNames: [],
    * N9 O' X, G& u! |4 |; b# q
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    , C" k" W  o5 x* J/ N  w2 ~1 O
  7.     },
    8 B6 g0 c  s" p7 p2 u" `" D$ e3 s/ q
  8.     methods: {
    # Z" A$ M5 i, P* b! ?! s
  9.         changeAllChecked: function() {
    + H4 P7 P' g8 |9 {1 n/ m4 p
  10.             if (this.checked) {
    " \1 f) Z4 X9 @* y: F: O/ S, a- u9 e
  11.                 this.checkedNames = this.checkedArr# S$ S& I0 c5 j0 a; R) n+ ?* _5 `
  12.             } else {
    / @! e1 g3 l4 ^
  13.                 this.checkedNames = []
    % }" v3 m5 m- }7 u6 }/ f
  14.             }
    3 Y1 h) _4 l# H
  15.         }
    : i+ x% C9 o$ x1 E& A* `
  16.     },
    7 R; j  M6 F4 z! }6 i& Q4 u, V/ K: l2 J
  17.     watch: {
    : p; `1 _" A$ l/ r6 k
  18.         "checkedNames": function() {
    # M5 j# a3 x! L5 P( M! U5 c
  19.             if (this.checkedNames.length == this.checkedArr.length) {& p1 o/ H9 U3 {8 ^
  20.                 this.checked = true
    1 p% S7 j) x6 ~+ M* B
  21.             } else {8 X4 u7 B, p, X  D+ I/ K
  22.                 this.checked = false
    3 |" o- q  P8 m  Y+ y' O  g8 y
  23.             }7 q& I- ]2 w! M& d+ ~4 ^3 Y
  24.         }; ?2 `2 k2 X; e" p
  25.     }
    4 p5 j" r- G# R. k
  26. })
复制代码
  Z4 o' G7 m! T/ V# n. [9 r5 |
: G. k; m) n8 N

: F' h6 d% ]. Z8 @! p* w! F5 h/ O7 G+ v# G4 z
, \1 q/ ?! a( A5 |! M# _. D
6 F/ W8 s5 P) u7 M) q! y
, ?" x( ]  Z/ T5 G- ~6 g
, g" \8 r  e( l" W# e7 v5 O& ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 13:44 , Processed in 0.115818 second(s), 23 queries .

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