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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
2 |1 a/ M% e* ~* F5 A
  1. <div id="app"># p: C  u8 j, u, j
  2.   <p>input 元素:</p>$ U. A! C8 n+ O  e; H: q0 z2 O
  3.   <input v-model="message" placeholder="编辑我……">% ^1 Z# D& D  e
  4.   <p>消息是: {{ message }}</p>1 b7 M1 {$ o3 v& ?  Z5 x
  5.    
    , |; }; G7 g, ^6 o& K
  6.   <p>textarea 元素:</p>
    ) Y, ^: k9 i- a- W( Y
  7.   <p style="white-space: pre">{{ message2 }}</p>' U2 f9 f/ \- x
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>. @! U( G) y8 o/ s9 Q3 c1 N
  9. </div>
    $ Z3 A, l) n$ [' c. F
  10. / R5 k& s5 ?" E3 B
  11. <script>4 ~2 j/ g) l8 {  c' y) }2 j6 N/ K
  12. new Vue({/ G+ o) K7 o  d  c
  13.   el: '#app',
    5 H2 G; ]4 L( c+ N* Z
  14.   data: {2 f1 W7 d# l  E% s; D
  15.     message: 'Runoob',
    ! z+ [, `! M  W3 H6 W' L% J9 W, f" i
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    4 P$ O8 O" T# l; \
  17.   }
    ( f/ P: K/ j& Y" i
  18. })
    5 H( t3 I/ I9 X1 |8 O! I9 B' p
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
1 a% V: F1 Y- T5 _
  1. <div id="app">
    ) e$ t3 P& H' J- R( B$ r% i
  2.   <p>单个复选框:</p>+ a$ @4 I& ?) ?+ D% i
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    3 l2 A5 ~0 o" T0 h3 O
  4.   <label for="checkbox">{{ checked }}</label>
    * A% b! G0 E; V
  5.     6 L- }( ]- ?! s- J/ h$ k
  6.   <p>多个复选框:</p>6 _: x3 r2 t3 w* s2 l; D" B) _6 a
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">, H0 y4 s+ o, a3 b
  8.   <label for="runoob">Runoob</label>! i; X& n$ R/ _# f0 R) y) I0 S
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    1 M4 H. F; ?1 V: H+ g  G0 f6 b
  10.   <label for="google">Google</label>4 P- U* s3 l- J& E; l5 V
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    , r; m0 T- U5 M
  12.   <label for="taobao">taobao</label># @- ?0 k7 O$ T# Q! O
  13.   <br>0 \" |7 G& D( p, N
  14.   <span>选择的值为: {{ checkedNames }}</span>
    , y5 r  g) o; B  {4 o
  15. </div>6 Z+ o7 {, o; r5 i4 B9 w
  16. # |2 K. b7 u$ y+ I3 W+ C# ~
  17. <script>0 t5 U5 E/ n9 I2 [" K3 V% S4 a
  18. new Vue({
    3 B8 ]5 r/ k, B0 I' [9 I) ]
  19.   el: '#app',
    0 Y: t. H! C8 M0 l6 y& i9 C
  20.   data: {% T+ i& W- I3 h1 n" H
  21.     checked : false,
    7 _3 |# W" i& G" b
  22.     checkedNames: []2 L: B+ v8 X! V+ G' J
  23.   }
    8 x% I7 ^$ L8 F) q1 R/ ^
  24. })
    $ F% k  |- L7 b6 \8 N
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮; T2 k0 E) N  H: |
  1. <div id="app">4 F! D. U* s5 q1 P9 M9 O* s
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    % {) h: l& `3 \9 Z; q  D: o
  3.   <label for="runoob">Runoob</label>2 W8 E/ Z8 C& z6 _8 h1 J
  4.   <br>2 A, S& O$ J5 g
  5.   <input type="radio" id="google" value="Google" v-model="picked">2 h- u( w' {2 R8 U( b; S4 S
  6.   <label for="google">Google</label>
    " q+ V) ^" \5 ]; @& _
  7.   <br>$ G9 \8 o1 V; v* s+ \- R6 s
  8.   <span>选中值为: {{ picked }}</span>
    ) z; `3 G& X5 q
  9. </div>9 a! X$ T- C8 Q) |* T

  10. 7 ]$ U) b4 t: E
  11. <script>
    ; j3 X: p" ^3 G5 z! z+ A
  12. new Vue({5 z( W3 l  d$ [' I5 ]; Y
  13.   el: '#app'," E% k6 f7 W- \4 B4 S; D6 d5 B% j
  14.   data: {
    7 `) [4 t* g2 z
  15.     picked : 'Runoob'
    3 K: o' _- Z& ?9 N
  16.   }
    ! s9 R+ Y8 u7 t" T- Y. J
  17. })$ f( e$ d# a0 o! [: q
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
: ]: V7 ~; N( p1 b1 E0 K
  1. <div id="app">+ ~4 h2 K+ T' t# g
  2.   <select v-model="selected" name="fruit">6 P; r6 V; o# w0 Y* C- O5 g
  3.     <option value="">选择一个网站</option>
    . [2 C! J7 S9 J. M! ?8 ?
  4.     <option value="www.runoob.com">Runoob</option>8 k+ C* p7 L# [1 x
  5.     <option value="www.google.com">Google</option>
    & [2 ]& P; ]! l+ t" C
  6.   </select>) I2 }1 v* X  H. I# X8 ?

  7. # i" ?# e& Q$ `7 N
  8.   <div id="output">* u+ A- O( J* M; V% ^$ }
  9.       选择的网站是: {{selected}}6 \0 ~5 m4 C4 o) F& l  h" Q" q+ X
  10.   </div>, Q5 V' Z2 t7 [: r3 j
  11. </div>- Z" U. n' }! B, ~  l4 P
  12. / G: |9 w( O6 c, ~# o, C9 O, ~+ K
  13. <script>
    # r: [  H4 c9 d1 T( L: M9 w. h
  14. new Vue({7 b: W4 ]0 e; y: _
  15.   el: '#app',  V+ y# r# j/ N
  16.   data: {
    0 a4 o6 B- k  s# }- v" q
  17.     selected: ''
    8 R& w: Q( M4 f+ ?9 n! R
  18.   }/ D0 i# X$ [: k+ S
  19. })1 ?% C2 T) A  @8 a! g# s& y
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->/ H7 ?# J8 K' s9 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({
    3 B+ p& @. y$ M; y, p
  2.     el: '#app',
    6 {2 u2 `' @1 ]) C/ D3 _
  3.     data: {4 B3 q9 @9 N0 F8 E# ~. o4 P
  4.         checked: false,
    ) h/ e4 k- U" h
  5.         checkedNames: [],
    5 K. g: ]) d) [4 q
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    + K  [8 T2 }* q  U  y! K$ P
  7.     },
    $ O5 |# U) |7 _4 u% G  h. \
  8.     methods: {
    : a0 ^! E! V2 @. }
  9.         changeAllChecked: function() {* n# y# R, x* Z, r
  10.             if (this.checked) {2 k3 F6 r+ U! _  ?
  11.                 this.checkedNames = this.checkedArr
    . Q' l  d& N+ Q, x4 }; e: w
  12.             } else {
    5 x6 Z2 I2 R- ^; b4 M3 p
  13.                 this.checkedNames = []% c# n  M$ E2 K
  14.             }1 h" r% \! \# f2 G# @4 D
  15.         }  m2 G* I' G4 K. P. Y0 d* F
  16.     },
    0 N! U. t( Q2 j7 c' j/ z7 M
  17.     watch: {9 L5 K4 F# ^6 w) Q
  18.         "checkedNames": function() {) [7 u. H! n  k( s! o
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    7 L& i9 R' e+ g
  20.                 this.checked = true
    - N( V  x0 }6 \0 E) s* Z# X+ D1 l
  21.             } else {+ Y# R  l, B0 |* W* d' Q5 ^
  22.                 this.checked = false1 M' @* I, T. w3 M9 j4 i
  23.             }; `# w4 ~- A/ }+ N4 ~
  24.         }
    & k1 {' f) }8 H& ?5 [! [+ Q% _
  25.     }* A; j" v; x; _4 v* _! c
  26. })
复制代码

3 z& ?3 \" l' M* U! b0 X9 O: u1 {" l" X5 [& ~, v  W9 g! P
1 W: C: Y4 j5 Q) R

) a' `8 q' W; Z% i- [5 `0 K; w
3 q+ I/ B8 q  X; M( `  b0 R/ l5 v2 ^/ J4 Q; p

( `* Q% u8 I, M8 `; i; G: L! p( ]- ^5 d& D( E1 A4 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 17:22 , Processed in 0.059693 second(s), 22 queries .

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