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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

: U% y8 g) C. @2 E7 u4 A+ y
  1. <div id="app">
    " n2 l7 y, l9 n. w8 U! b8 O. L0 I7 j
  2.   <p>input 元素:</p>/ l: }3 G0 _! U2 J+ l! ]; n
  3.   <input v-model="message" placeholder="编辑我……">( ]' o; Y& a7 ?1 R* g: Z6 `/ d1 R
  4.   <p>消息是: {{ message }}</p>
    , R, i7 v8 ?* _) v$ k5 N% e& V& p( N' T
  5.     / T: E' z* [) ~2 |
  6.   <p>textarea 元素:</p>
    7 f9 j1 R# |% ]! d8 F
  7.   <p style="white-space: pre">{{ message2 }}</p>" t, u" {# P: n8 ~- ~) l$ [
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    9 U5 [- N' R9 z4 q" s5 }
  9. </div>
    / K2 i8 b, o8 \% @$ w9 V% y5 Q

  10. 7 Z" a& x$ K3 F
  11. <script>0 o4 x. n# h  G/ `
  12. new Vue({* q% G3 T! g2 {4 B) D0 s+ C
  13.   el: '#app',
    " A: F+ y4 C5 x7 R9 w" d5 D
  14.   data: {+ X& @, A/ j6 m7 h8 M7 N: v& Z3 j
  15.     message: 'Runoob',
    0 G9 x- U3 x+ E0 Y
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'7 x3 Z" U+ G) H, ]( m3 e
  17.   }
    * m9 d/ o8 F& T7 R0 y3 X/ l
  18. })
    9 h, k8 r( _7 i! l8 y  j
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
4 F  f5 ~, q" p" r6 k) W9 l
  1. <div id="app">
    . t3 S- i* F" M/ s
  2.   <p>单个复选框:</p>! F$ h( P, @+ W& `$ O$ t
  3.   <input type="checkbox" id="checkbox" v-model="checked">
      B$ N' X- g7 |9 g& u% S
  4.   <label for="checkbox">{{ checked }}</label>0 t) V2 ?0 H- U% {: ^8 h5 C* G
  5.     9 |2 q: m7 o, _$ M
  6.   <p>多个复选框:</p>
    : S) Y2 w; k# z" Q& {0 p
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    ) U/ n5 x" F" h$ Y0 x
  8.   <label for="runoob">Runoob</label>/ |; M/ r8 Y8 Z
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">8 j% N) s# v6 Q6 f: D6 z9 E
  10.   <label for="google">Google</label>' f4 i, Y0 @% n& x
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    7 A) c  |; X, H/ J' {! O) C: `( q  Y- z
  12.   <label for="taobao">taobao</label>
    6 f( D9 {, R# k
  13.   <br>
    / A3 \- R3 v$ o7 D# p* @
  14.   <span>选择的值为: {{ checkedNames }}</span>
    7 ~, o! z( ]5 W5 Z, x# J8 E9 N: M
  15. </div>
    - P4 @9 R' \9 e' E/ j
  16. 5 U8 g& R3 t6 w3 z1 h5 k( w- {
  17. <script>
    . |9 O% W9 q$ d5 [3 l
  18. new Vue({" m1 j! p' _; `9 b
  19.   el: '#app',) A8 m4 C; e& c
  20.   data: {
    & Q7 _& ]; ]' ?$ J& ^
  21.     checked : false,
    1 c+ u( J' b: O( E. j8 r* L) z
  22.     checkedNames: []* e- e2 Q  ~$ z% S! s/ G
  23.   }% V( [  ^" [/ _$ C& t. z+ W3 w
  24. })8 B6 v/ y9 S3 [8 ?9 I* E
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮& I4 s7 o# B0 \  L! Z9 K
  1. <div id="app">( n! M! |# p3 u0 x
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    9 l. q- L4 _5 q( K7 H# U
  3.   <label for="runoob">Runoob</label>' M3 N0 x# ~2 p8 m$ K6 n9 \
  4.   <br>0 ^( _0 ^( d! L: r9 K! ^( _5 I
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    . A" g! q, l" P8 H
  6.   <label for="google">Google</label>
    ; r3 `5 Y0 f! w2 _. T9 o$ F9 z: e
  7.   <br>$ z5 [0 d4 ?* L. o- @3 V+ c3 A
  8.   <span>选中值为: {{ picked }}</span>/ f( r- j$ W- |) W$ c
  9. </div>4 C* ^" t- Y1 O5 j! L' C/ F
  10. . p' A9 h2 ?8 [7 H' s# R: ~% i: t4 D
  11. <script>+ n$ n% M% k8 t
  12. new Vue({3 o' g( O. a  l! d" _8 q  L- P3 |9 @
  13.   el: '#app',) r2 t, ^0 T9 w- H/ h! ]2 j0 C
  14.   data: {
    0 j! I3 r+ Z- X8 h8 T6 z7 I8 j$ x
  15.     picked : 'Runoob', u3 m% J) W2 i
  16.   }" i0 x4 B/ l$ i
  17. })6 g, h' Q4 g1 C! m# }9 r
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select) I5 y0 n7 Q6 L5 R4 R
  1. <div id="app">
    ' X3 f2 _2 @3 t& C3 |
  2.   <select v-model="selected" name="fruit">: p+ O; P; m- ]2 \+ m
  3.     <option value="">选择一个网站</option>3 n+ q% d( z6 Q3 ]* m/ E4 V
  4.     <option value="www.runoob.com">Runoob</option># M% i; G% Q$ v! h, O. a
  5.     <option value="www.google.com">Google</option>- @% D# U6 G0 N( s& H- x; W
  6.   </select>
    0 S- m; `% `$ E$ p
  7.   j6 C& n. A% @  D) _
  8.   <div id="output">/ M. c8 t" o2 Z0 J
  9.       选择的网站是: {{selected}}
      M3 a* O# N! p' R9 V
  10.   </div>
    / r# c& ~% {2 M  j) W
  11. </div>% n( P' J; j3 R; l$ a

  12. : z5 W1 W; J+ O- {. W
  13. <script>2 ]6 X3 J; g6 Z8 f2 H8 z" X
  14. new Vue({. G4 ?3 f. `' n' O- Q
  15.   el: '#app',
    9 B+ v4 f# j5 z. w1 C
  16.   data: {1 E4 U& U* B7 F( _! B
  17.     selected: ''
    * s7 b$ w# A. L! \6 v& f7 ?
  18.   }
    % w# d+ `) n  U# G0 A6 x$ [
  19. })
    1 V7 K5 Z" e. w0 ^6 U
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->. P, H' b, F2 H! x' ^
  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({
    ! N. }+ N2 O7 s* ^( D6 m
  2.     el: '#app',1 y6 b; w# w1 G. F/ S
  3.     data: {. {( o7 D% `4 Q: [3 T
  4.         checked: false,5 w4 _: U9 O% s! m2 I+ {: s: T
  5.         checkedNames: [],
    + U, [5 Q# e" U, g! d- `
  6.         checkedArr: ["Runoob", "Taobao", "Google"]7 ?( H9 \# e8 U; ~
  7.     },
    ! i' k, X) _/ J4 ~& _, }1 }4 l+ }, x
  8.     methods: {
    ) H0 q, L/ L% A6 Y% d9 @7 A
  9.         changeAllChecked: function() {2 f8 }/ u' l0 }. P; j. u
  10.             if (this.checked) {
    $ A# K- o. h( b6 j3 F0 f
  11.                 this.checkedNames = this.checkedArr8 ~0 q8 h* U$ w4 X
  12.             } else {
    8 a% s; k& T, w7 a  D8 x) Z
  13.                 this.checkedNames = []
    ( s- d  A/ S1 p+ _, z/ c$ v
  14.             }
      L# T8 k7 z$ P- `. M- K
  15.         }* s. I! H7 i  W; j- c
  16.     },
      b) ]0 ^$ O+ N8 R$ H
  17.     watch: {$ {" Y# y8 h  y4 T
  18.         "checkedNames": function() {) S: t+ N* `4 D) |
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    1 k3 a; E  B8 s7 g" b& A8 i6 N( T
  20.                 this.checked = true
    : J' |$ H/ j# m3 u5 H+ K
  21.             } else {
    3 Q0 l' G$ M+ C9 |# T) Z
  22.                 this.checked = false0 ?6 A7 H- x5 R# A! B" R3 G
  23.             }
    ' x( z  \4 }& y& a9 C: @. P3 |
  24.         }
    + I! `) g5 a5 q! e8 {5 z% t5 b. ]' f
  25.     }* \3 m+ K5 a* ^
  26. })
复制代码
4 {4 p+ s  A$ q

0 Y: `' O& N3 `' T1 {6 Z
- K  ?8 z( E* |+ \9 y" c1 s, F, h$ p
, b$ V& D: \7 ~+ y6 J4 S6 d3 n$ J5 b
! {' R, C3 F" A  n5 k) P

- X* K/ s% `+ n' [6 j
$ o- H& V7 Q" h- U& }! r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-19 22:40 , Processed in 0.056655 second(s), 22 queries .

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