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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
7 g* S/ X0 j$ \+ I
  1. <div id="app">
    3 \  \! c' [! u$ }& M
  2.   <p>input 元素:</p>! i( e3 v$ O9 C9 F( m% [
  3.   <input v-model="message" placeholder="编辑我……">; u. h" ?  N* j  r$ W
  4.   <p>消息是: {{ message }}</p>3 ^, y; q+ ^7 u0 i% U
  5.    
    . s* P; N) {" _- i7 U
  6.   <p>textarea 元素:</p>  t6 J0 L$ P8 H
  7.   <p style="white-space: pre">{{ message2 }}</p>
    3 z, M& s6 G+ f
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    ) x# C) R6 h/ K* {( s6 Z- U. R
  9. </div>; q3 A, V1 g0 @; p! s
  10. 6 r0 e9 M$ @! W3 G+ f
  11. <script>3 T2 a! R) k, R+ G* {  z( |& K8 v
  12. new Vue({3 S. ?9 X$ c  ]
  13.   el: '#app',' [, }9 D6 G0 Q' g$ |3 ^* b! X
  14.   data: {9 w/ t, p% i% g, v; a* V
  15.     message: 'Runoob',
    " ~2 N* r# q! X4 p& U
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'5 @" Z& g0 \( P; U$ I+ ?. a
  17.   }+ ]: a' ^/ V* e7 ~" w5 @& {
  18. })
    6 U; H' J0 p) G% r! \$ X8 ]9 y
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
* e9 e- |9 `# f% P- B* @
  1. <div id="app">
    - w6 o, K5 @9 e0 b$ J
  2.   <p>单个复选框:</p>+ P! D# K1 F* a
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    4 @. b. b7 g1 T% K. z3 ^
  4.   <label for="checkbox">{{ checked }}</label>  J+ h/ i! Z' D' u( [
  5.    
    - f: u( [& B: `7 Z$ C  _
  6.   <p>多个复选框:</p>1 R6 o. O0 p& d
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">9 X) {( P* L& z/ \
  8.   <label for="runoob">Runoob</label>
    / V: g* u" \4 {0 m4 l
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    $ w; S2 b: ?; c  K$ |7 \6 E8 I
  10.   <label for="google">Google</label>
    ( X( a# m) h; W
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">) \: k* v5 H# D, {% ~. g- J5 w& I
  12.   <label for="taobao">taobao</label>. M" ~. }0 n2 c, h# F1 F1 p3 u
  13.   <br>% {) f" `+ p; x5 E
  14.   <span>选择的值为: {{ checkedNames }}</span>
      I: \, }( i# q, A' p$ K
  15. </div>- f% h/ q) r9 B) |
  16. . R) R% o( {1 ^! l& U9 y
  17. <script>2 i8 v9 s+ c, R) y4 m7 c. I
  18. new Vue({2 K4 p. ^: v3 ~) d: `* M
  19.   el: '#app',
    : o& G7 x. a+ ~
  20.   data: {
    - g/ o3 _, T  O
  21.     checked : false,5 t7 n0 I& x- [9 C" G
  22.     checkedNames: []  y5 Z! ~. d" t+ I, n: }% V8 E
  23.   }. S/ f' K% L' p" W8 @
  24. })
    3 |, S$ U, ~$ _1 C& g
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
: P' g% U: g/ @9 j
  1. <div id="app">6 Z+ {# `: j8 S6 O0 L
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">8 h: j* Y( x2 |+ ~7 |6 e
  3.   <label for="runoob">Runoob</label>
      i/ C* a% X$ T4 q5 h& W+ m
  4.   <br>  I3 \8 ]0 M3 J+ E: B3 B) Z
  5.   <input type="radio" id="google" value="Google" v-model="picked">/ T2 L/ P' `' [: ]! N9 u0 k) K
  6.   <label for="google">Google</label>
    ; g2 f4 W$ i/ H: t  c: }0 G. Z/ M
  7.   <br>
    2 h5 t, D: P$ ?( b" u+ t
  8.   <span>选中值为: {{ picked }}</span>
    - h% j2 Y) ?& E( k6 c' |8 {4 U
  9. </div>
    0 Z6 Y7 z8 h- A/ y: Q

  10. & d8 ?; `" F& v0 C1 l
  11. <script>
    5 i1 Q/ A1 d7 Q3 D: Y: x8 V( o4 k
  12. new Vue({
    / S+ [7 C9 [3 W6 w5 L9 F, k* i1 y
  13.   el: '#app',  ^2 e+ J" |7 t# j/ d
  14.   data: {
    ) t7 l: ]# \6 E* D% f
  15.     picked : 'Runoob'; y1 T$ W9 r5 `8 ]2 T! f/ z# @& i
  16.   }
    ( A: ^1 Y( H3 Z5 G  m# n/ `3 C
  17. })$ v- f, o) @9 l; t4 p$ D
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
1 c4 Y  G5 [. C9 f
  1. <div id="app">
    % T4 ]6 `& y( O  e2 W
  2.   <select v-model="selected" name="fruit">
    0 c  ]) M6 T# c+ ?& l* `1 @# M. Z- ]6 A
  3.     <option value="">选择一个网站</option>4 C' n* @. u( i! l6 Z( W( s* c
  4.     <option value="www.runoob.com">Runoob</option>3 n/ }# K# c" A$ s" X# `
  5.     <option value="www.google.com">Google</option>1 K" d/ w2 O: n% H* x
  6.   </select>- x) B. J9 S: b) o) W3 D: U, l* C* c

  7. ! j/ d& i8 M% N6 y% h  ?
  8.   <div id="output">! P8 \4 ~4 U# `9 y& F% n/ K
  9.       选择的网站是: {{selected}}
    ; U- H# [1 T% I* J+ F7 w
  10.   </div>9 M/ F6 I( F- S' w. E7 W8 ?# J
  11. </div>
    8 A5 p/ k* Q2 @

  12. 5 C& J- D# w, Z5 d) o
  13. <script>
    4 q0 A$ D7 f) r. ?* E
  14. new Vue({* {8 D9 J6 b  R" W* h: n) E9 w0 N
  15.   el: '#app',3 q# A% h, s2 [( l4 s* L5 x
  16.   data: {
    - |& U/ E5 u, b( A5 c
  17.     selected: '' 5 s/ T+ I$ }$ z6 y
  18.   }
    ! r% ?6 l8 Q% C8 S1 c; J$ B( K
  19. })
    % k- P6 q5 A: m) Z
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    ( s3 [, O1 F0 W/ T0 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({8 v6 W1 ]& j6 t  I+ A+ b+ K
  2.     el: '#app',
    $ K- x' j# i) C" Y- c# g
  3.     data: {# a# X. j7 O7 H
  4.         checked: false,6 {: h; V9 D. n  r4 D
  5.         checkedNames: [],
    8 J8 _8 @7 p3 M, I: G9 {/ b* v$ s
  6.         checkedArr: ["Runoob", "Taobao", "Google"]6 C) G7 F( o8 M
  7.     },* }) {* [  A  Q. t+ Y$ e$ K
  8.     methods: {5 Z" J, E. J! B9 q/ w" O4 M
  9.         changeAllChecked: function() {
    7 [+ S  B4 N. k4 f1 S9 Y5 i
  10.             if (this.checked) {
    1 g8 m. Q! j! C7 G0 y
  11.                 this.checkedNames = this.checkedArr8 `" B0 a& M1 H7 X
  12.             } else {
    : p) K6 ?0 X; [& b& o
  13.                 this.checkedNames = []* {( m! |' C1 l( {6 G" G
  14.             }% P0 f9 d1 c* Q+ Z- C$ x
  15.         }
    6 D# }# q  a0 d2 ^: s* x
  16.     },( z2 z. p+ Z2 ]& l" R2 q
  17.     watch: {  F3 u9 m" t& N' h* ~" x0 }
  18.         "checkedNames": function() {2 }& `: y9 _. F1 {% y
  19.             if (this.checkedNames.length == this.checkedArr.length) {- I( F6 `3 b; d& U5 C! }0 R) A
  20.                 this.checked = true* N" E+ T) k/ \( z7 ^7 i1 T: t
  21.             } else {
    9 u: w/ d3 n6 b( O
  22.                 this.checked = false; X. s6 ]/ A" K! P
  23.             }
    / a% P4 b. I& @' F0 ~  k3 e, J
  24.         }! [) ^( f6 ?% ]# I1 M# A0 _+ U
  25.     }
    8 m* p; A$ k' t( ~& x5 J, }( w4 P
  26. })
复制代码

- k( L+ H) I0 P. i9 X% s8 u6 h' w  j. |9 p" x0 P9 k: `. l

- @( h$ Z- P4 s! }7 m& B5 ~1 R; B6 x: l8 u; H, g+ k: F% r

# I- ~+ q  q' B  P  ~' i0 \4 Z" z4 _' L' ^4 T' J# W9 m
8 K% y* j4 H* x
: I1 J, a$ Z/ N! }8 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 14:42 , Processed in 0.072771 second(s), 25 queries .

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