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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
! ^6 s4 [* S: B* I* `' X8 G1 a
  1. <div id="app">0 w8 o+ ~* @4 [6 ?
  2.   <p>input 元素:</p>
    - j( C: }# d5 y3 l  C* \0 u
  3.   <input v-model="message" placeholder="编辑我……">/ {' X" {+ D$ `, N5 l
  4.   <p>消息是: {{ message }}</p>3 J$ m8 L/ V9 ?2 z! \
  5.    
    7 H& I- {+ U0 {' |$ x) T
  6.   <p>textarea 元素:</p>( t" c0 b) v: Z* {* e
  7.   <p style="white-space: pre">{{ message2 }}</p>
    + F% {: E( }5 m0 z8 G5 b( d8 a
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>- E5 i! J6 v- \
  9. </div>
    1 c) M: M% [0 R

  10. % Z! V$ H& o1 ?- h$ w
  11. <script>1 A9 R. \; B+ |6 M- t% N) W7 q
  12. new Vue({
    ! S/ H6 ?8 O5 @5 Q/ _- L# Y' V
  13.   el: '#app',
    ) @* Q  w. ]$ D; O& k, Z) L
  14.   data: {- b! r$ s: Q) l6 }" s# ^8 `
  15.     message: 'Runoob',: Y+ r0 z* L0 o1 |
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'# {* w/ N' G4 s+ |+ n0 Q1 y7 c. X+ K
  17.   }2 G7 e& L6 E; N( Y- d& c; d0 L; d
  18. }). u7 T: i( C# @# Z0 W% r
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

1 A% q; a7 H7 h0 O6 J2 G
  1. <div id="app">5 a1 ~0 m& F+ z# p7 s
  2.   <p>单个复选框:</p>
    4 F* |6 u; d" ~* D( K# u: T
  3.   <input type="checkbox" id="checkbox" v-model="checked">4 _# ~6 P  x1 P1 ?* O6 I6 _
  4.   <label for="checkbox">{{ checked }}</label>' V% P1 h8 j3 ~0 \
  5.     2 O7 T) Z. U, Q8 V! C5 P
  6.   <p>多个复选框:</p>* W6 [; h% i' F0 }9 I, _- x8 h
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">+ O6 H$ U0 B, \& t9 A
  8.   <label for="runoob">Runoob</label>8 J3 r" N4 b' y3 b+ N9 u$ }% _
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    ( m9 x) e! V) l" M0 M) ]# S
  10.   <label for="google">Google</label>
    5 T  E% E* w& @( n" U
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    4 d* W% [! o+ Y& [
  12.   <label for="taobao">taobao</label>
    3 `6 x2 L+ G4 H  t' O
  13.   <br>
    4 ^% _. {1 i3 @) E) ^6 I
  14.   <span>选择的值为: {{ checkedNames }}</span>
    " O) E/ T% ~2 c& _( d0 n
  15. </div>
    1 X% v5 a% O( r/ X1 i: p; a  w
  16. 7 t9 Q2 R" F( k. G) r
  17. <script>
    / I9 n* g- e8 x1 ?* R
  18. new Vue({# n8 Q. n0 {5 B3 a) L/ X
  19.   el: '#app',
    2 o- ?+ ^. y0 b4 g
  20.   data: {, c; O$ T9 U& _+ n
  21.     checked : false,/ P) x! Y/ j5 N( B0 _5 a2 r
  22.     checkedNames: []: D, f$ o- M( W" Z0 Z, \
  23.   }% U: r& K: W; l0 Z
  24. })
    - h; L) \8 C4 s/ r$ o) c
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
3 q; a$ N( s$ N& B% d
  1. <div id="app">$ G6 g- l' Z9 u
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    ' w1 `" Q/ T% ~9 A
  3.   <label for="runoob">Runoob</label>
    # y# a. D4 N) Z4 B
  4.   <br>7 c% X" x# j* o! C' O. P' r
  5.   <input type="radio" id="google" value="Google" v-model="picked">/ N' A; W2 G/ s/ N  N$ Q2 b
  6.   <label for="google">Google</label>
    - _$ v- j* N! o2 G/ }1 i
  7.   <br>
    + b2 r$ j' a5 F" a) t- c
  8.   <span>选中值为: {{ picked }}</span>5 r3 U* W& B# f$ J% q2 J' m
  9. </div>
    , w# r, G' E1 G4 m; ^# r5 ~

  10. 4 k% O* Y7 I; A
  11. <script>
    1 L' a8 O& P3 x0 B! \# J0 x2 i* Q( t
  12. new Vue({
    / b/ Q! q$ ^3 G( J3 ]/ N7 O! H+ `
  13.   el: '#app',
    : A1 ?1 {6 K6 s# I% [
  14.   data: {
    : C( m5 M* b2 H. W4 T
  15.     picked : 'Runoob'  B$ k* T1 j1 N+ z- @
  16.   }
    . Y: {8 g4 i# d, M* O' \6 Y+ R
  17. })) C# E: Q6 f, o2 M! }
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
5 b' P( I) R7 w
  1. <div id="app">' i$ M1 z; X9 a1 A" Y' m
  2.   <select v-model="selected" name="fruit">
    " X1 r7 @. B+ j- D
  3.     <option value="">选择一个网站</option>) N: T9 d& F0 C0 W
  4.     <option value="www.runoob.com">Runoob</option>: r2 c0 p. v1 a
  5.     <option value="www.google.com">Google</option>! k( ^* `; o4 J+ i6 A- ^8 W
  6.   </select>- C) P9 `, J/ m0 v7 Q. x) e
  7. 7 ]7 f- I  k( V7 [
  8.   <div id="output">7 a( S- J$ J' i  |, t: r
  9.       选择的网站是: {{selected}}
    $ x/ e0 T, C# [, G; u. F
  10.   </div>- c! u& J, c$ I0 Q% q; ~6 l1 w2 F' c9 Z
  11. </div>
    + g4 c, D. w5 H5 `  h

  12. . [* s, K8 g4 o
  13. <script>: f* b5 Z2 Q+ ]& U+ r5 }: v
  14. new Vue({
      p! h. I# l8 P, J- {
  15.   el: '#app',/ s, Q5 T! ^* {5 [
  16.   data: {
    4 f4 _( N; h( u6 y7 Q
  17.     selected: ''
    9 }  g+ x' m0 E- q) y* B( v' b4 c
  18.   }
    ) r: c5 t1 U6 n
  19. })
    9 c3 w. l  ^" T1 {$ a7 t/ \
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    % f# ?' y2 Q" F9 B& x! N! 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({) O: C/ Z1 l1 u3 r" b  P
  2.     el: '#app',
    9 @. a: f! j! W! R  i! L
  3.     data: {# ^& U. X. {0 |  m; E: k
  4.         checked: false,
    * m8 T, z; [) B, J
  5.         checkedNames: [],
    & j" s- ]" W7 j! s$ Z
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    % J) G1 P) x6 [. R+ d- V& j1 I
  7.     },1 O! k5 o4 o) B  u! L
  8.     methods: {4 G8 p5 n" B, `) l/ \
  9.         changeAllChecked: function() {
    : }3 M) O1 o5 ?# ?9 E
  10.             if (this.checked) {. [; s' H' ~1 V. S+ V0 p
  11.                 this.checkedNames = this.checkedArr1 x& q; ^; {# M2 o, V- b
  12.             } else {
    ' a0 x; y6 Y8 ?' d( P4 g
  13.                 this.checkedNames = []6 L% e4 w/ x/ q# l3 `# V
  14.             }. K( ^0 q( t9 R: T( u
  15.         }
    7 O. s8 u7 S# F- G
  16.     },
    " I2 {. Q/ H( J0 [% g. ^
  17.     watch: {- L& i; B. _+ C# H1 v9 J  Y% h
  18.         "checkedNames": function() {0 M* Q, m' I) F% g7 k+ i2 T
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    2 I/ ]- e) A& \: I' e
  20.                 this.checked = true4 F7 U( H2 ^1 y- U5 I
  21.             } else {" O. J" U2 P& A8 i. p7 w
  22.                 this.checked = false
    3 d/ v8 m7 E/ R/ E2 b
  23.             }
    * ^: z5 b% C6 {4 ~- J" L
  24.         }+ K' t3 p( |+ w; b$ E
  25.     }
    " P/ v& K, l/ d$ ~2 V
  26. })
复制代码
1 A$ v2 i+ `* E2 u7 Y5 C' V2 |8 f& |

4 e+ M. P& Y; h/ U$ Q& V  ?( y, L( Q1 r1 c( c
- c8 o3 Q; F: |; i5 F; c
, @! m" r7 [. L, V* @+ D
$ Q1 }9 [2 p8 }- j+ w; X: C
  L0 G; ^; {/ t8 h2 f
) ^) b+ {& m+ i3 @9 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 16:33 , Processed in 0.059617 second(s), 23 queries .

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