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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
: n' ~$ L- u- e: R! _' s5 P8 S
  1. <div id="app">" t; t6 A( `" ?  v* j; Q# A; n0 O
  2.   <p>input 元素:</p>
    " Z# ^" e- Q  Z. e; V
  3.   <input v-model="message" placeholder="编辑我……">
    $ Z$ ?9 |( Y& g/ J& ?
  4.   <p>消息是: {{ message }}</p>
    * ]* w) O. W8 `
  5.     0 }  r) U  |  E  r+ a, \' C
  6.   <p>textarea 元素:</p>- g' t/ [2 R; t- }1 g
  7.   <p style="white-space: pre">{{ message2 }}</p>* w9 k) K6 {! Y
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    6 _0 k3 o. D* Z8 u
  9. </div>
    9 p: C9 _  {+ b

  10. ! Q1 ?6 V/ _& ?% e& Q5 q
  11. <script>
    ( R; Z) Q* V5 ]8 A; F. S7 U
  12. new Vue({
    * t$ r: N- U0 ?/ C6 N8 Z
  13.   el: '#app',9 s7 [1 v: e# M  g; p- o
  14.   data: {
    - Z6 o1 J2 W% d
  15.     message: 'Runoob',
    ! g; z- ]8 T7 `9 O0 S' B
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    7 u1 b1 i+ W; M# V
  17.   }
    * ^' M) q' x1 z' d) \+ B
  18. })* d& j/ v1 x7 \" O+ |* d5 ?2 j1 w- d
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
. _; f0 _! o1 s$ T+ t* m7 n" o
  1. <div id="app">
    + r" {1 ^. D2 {( M' Z) L
  2.   <p>单个复选框:</p>
    " U2 `" R) o) X, N* `; S7 _
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    ' F+ i* Y7 K! @. V! }  e
  4.   <label for="checkbox">{{ checked }}</label>
    ! L  ^: @' H7 Y" l
  5.     " z% d! Z  y/ z
  6.   <p>多个复选框:</p>7 i+ d. d2 z6 i& u: L% h9 ^
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">* p: d9 [1 T3 d7 c
  8.   <label for="runoob">Runoob</label>
    ! Y. f  f7 b) {  e, a: H
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">6 n7 I" K# w; T4 r  E5 w( H' e
  10.   <label for="google">Google</label>" e8 e/ N! H% O* H4 U
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">+ p" h6 C; K3 Y
  12.   <label for="taobao">taobao</label>; G8 V8 G% b6 Y* t7 x& w
  13.   <br>
    ' i; |: p% X# k
  14.   <span>选择的值为: {{ checkedNames }}</span>
    . ^. ]% F/ u9 }
  15. </div>- R" V% ?3 f! |; T2 z
  16. / `% `' O- Y' [+ F3 @  {, t
  17. <script>- w% J3 B) N! W" [0 J1 Z
  18. new Vue({
    : P, s! S+ C4 d
  19.   el: '#app',
    & D  y+ M' Y. Q  `$ p9 y. Q! B0 c
  20.   data: {6 {- M. Z% P! i
  21.     checked : false,) n( X! s* z0 p0 V& Y1 {
  22.     checkedNames: []
    ( j! w5 x9 A" V4 y; C9 s$ v
  23.   }
    6 h( r: x& Q4 {5 X3 W- ^- Q
  24. })7 Q9 a- p- B/ C" R
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮0 D1 B" E2 O. u- J; T1 X
  1. <div id="app">
      |# @0 n9 R  w9 G$ @
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    1 p& h7 k* }7 o! a$ K4 ]
  3.   <label for="runoob">Runoob</label>
    $ ?- s2 S* {: M; h6 i! O8 t
  4.   <br>
    4 S/ ~9 k1 [3 e4 K. v% H
  5.   <input type="radio" id="google" value="Google" v-model="picked">- R- q  }4 h0 r4 K1 c4 s1 [9 d
  6.   <label for="google">Google</label>
    / P+ n- O) F9 ~/ P8 B; y" G
  7.   <br>+ ~0 L. L0 V* S8 P- g
  8.   <span>选中值为: {{ picked }}</span>$ t& J* r1 |  a. c# Z
  9. </div>
    ' s+ k% p1 ^/ q( [* X

  10. & N. T, A% F2 y$ c9 l6 {, C
  11. <script>0 T# Q% U+ q. l# |/ C
  12. new Vue({% M/ u0 G9 J' |2 l
  13.   el: '#app',
    4 J% L# [- S) T4 R2 x4 W
  14.   data: {
    6 R( _* m0 Y. {- F$ u! c
  15.     picked : 'Runoob'! S& a) W  r7 ]0 N9 W
  16.   }& M) G0 v  F( X6 P0 X8 s! z7 P" G
  17. })8 F, g& \" w  Q& J$ R
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
% {5 ]4 K; X# Q; S# J5 C: \
  1. <div id="app">
    1 e, n  R: O6 K6 M1 T5 w6 ^
  2.   <select v-model="selected" name="fruit">
    6 i" d; W, b6 i5 w" u6 c$ M6 x0 ]
  3.     <option value="">选择一个网站</option>
    7 m7 J: h, Z2 u( @1 k
  4.     <option value="www.runoob.com">Runoob</option>
    4 B3 s( u* i1 o6 F& z; f
  5.     <option value="www.google.com">Google</option>% C# {( N* R& m
  6.   </select>
    * s4 }, H3 o# R1 b

  7. 5 [* z* J7 L$ H7 t
  8.   <div id="output">! F7 L6 ?, j5 ]2 J
  9.       选择的网站是: {{selected}}
    5 |# B7 ~0 h; C; I1 J! \1 z
  10.   </div>% D  [% F1 ^0 x
  11. </div>! }: ]& ^8 S. s3 b

  12. : z; Z$ s2 ^5 g/ M) ]0 Y8 B7 E. x8 V
  13. <script>
    4 k2 z( X# }( M$ F& U2 `
  14. new Vue({3 }7 ]6 d" w. r! C' o5 z4 l
  15.   el: '#app',
    9 q2 W9 G! v& @- [% V& H- S
  16.   data: {  _; T# C" N# H  z. o, k
  17.     selected: '' 0 B1 h# B) |: ~- }
  18.   }
    : @" i1 q9 @( s
  19. })
    5 Q  Z+ H! u5 m3 }6 C1 K% W
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    / F8 g+ R8 M) M# t
  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({
    1 `" R' |5 y2 A
  2.     el: '#app',
    8 g% {5 }7 W" I, k) l2 W/ \. J
  3.     data: {2 a4 L( ~& C( g9 U3 k8 B
  4.         checked: false,) I7 `  L. r: L
  5.         checkedNames: [],* Y% D. m3 x* F! u
  6.         checkedArr: ["Runoob", "Taobao", "Google"]: b" y+ a: g# x, i9 E
  7.     },
    " j# ^7 M2 X% @& \: W
  8.     methods: {
    ; @; r4 Z3 A* H& E* K
  9.         changeAllChecked: function() {
    1 @  ]* [3 V: ~
  10.             if (this.checked) {
    3 B3 b2 j. w# @) R, n7 f
  11.                 this.checkedNames = this.checkedArr
    + t: A; |# {1 ]' B/ L$ e& j
  12.             } else {( c; a) g6 U; _" e! A2 t) l
  13.                 this.checkedNames = []
    & s/ {# R% r. `  n, R8 I
  14.             }# n, L7 T/ n( }$ m- L. u
  15.         }$ E& [$ k  p/ |9 I
  16.     },1 s; @% [2 A6 T5 z3 F. R
  17.     watch: {
    " J) b( _  w) v- q; L- G7 q
  18.         "checkedNames": function() {: d4 ?! w& u1 e4 T
  19.             if (this.checkedNames.length == this.checkedArr.length) {& s6 d1 b0 Y/ {  K  R
  20.                 this.checked = true8 M6 ^: A6 p2 D2 m% E) R! n
  21.             } else {
    . L3 }- C: [0 Y$ k8 |, t3 ?
  22.                 this.checked = false& o  `- i; M, [- N  A6 a
  23.             }
      ^4 S# m7 {& L8 F! h: J
  24.         }0 B' B- x6 p( K  n. _' n; |" x
  25.     }# b+ ?2 w, K; b
  26. })
复制代码
9 g, u" W- ^9 q: p+ ^

* W! w5 t. Y8 w
+ i" F! {, ]8 Z" E0 v3 l- j
& o0 D( C0 G* U- c
- V3 p9 i% k' A6 G9 z! R
# {- c1 A) g" `5 [1 ?0 K* y
- x8 s# R8 L3 S" m9 L. q- o" p& m; V" A0 x9 u, Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 02:52 , Processed in 0.059671 second(s), 22 queries .

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