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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

4 `" i$ k2 n6 {
  1. <div id="app">9 m& P. r2 G" W8 T1 X) A6 P; D
  2.   <p>input 元素:</p>
    5 Q! ]5 O' j# v  u4 H) x4 m& B& {
  3.   <input v-model="message" placeholder="编辑我……">, f+ N" h3 X6 [
  4.   <p>消息是: {{ message }}</p>
    $ Y6 G: [  ?0 }2 O: m3 E& B& ~
  5.    
    ) i4 l) |: L4 z( m+ L+ e
  6.   <p>textarea 元素:</p>
    4 k  F$ y2 d$ U# e
  7.   <p style="white-space: pre">{{ message2 }}</p>( b% r/ `3 ]. l  r
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    3 \% c% V( V/ `. A8 M& w
  9. </div>4 p0 u7 k7 r9 O  X3 g
  10. 9 k! u; p2 o) F2 X# i
  11. <script>
    3 y: ?0 t6 E* e1 D$ i7 |- q
  12. new Vue({
    4 t/ B1 J6 K- ?; z& y# M4 O
  13.   el: '#app',
    2 e* }; r/ r% q
  14.   data: {- z# z' ?( V3 z( X9 G7 V7 _
  15.     message: 'Runoob',; T* C8 E0 `! o4 z, Z! W
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'! Y+ p4 D  O2 f( l( [' p9 g5 r
  17.   }
    + [1 I3 K2 }8 q2 |& i) A
  18. })+ N7 J! r' \6 m. t# m* z, v
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

  k3 }1 e. g7 e! C  ?
  1. <div id="app">
    6 m6 J4 L9 F1 h4 Z1 w0 X% x" S
  2.   <p>单个复选框:</p>9 }/ l! {& T" |6 u, d" U
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    7 \0 p/ s* [$ z. k7 B& x
  4.   <label for="checkbox">{{ checked }}</label>! L! J) |0 X- v5 Q# ~+ a% {
  5.    
    * V4 I4 L9 a# Z. P: b
  6.   <p>多个复选框:</p>
    ; [2 X1 y/ C* r! Y3 Q1 N
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    7 z! U* D, L7 Q% p
  8.   <label for="runoob">Runoob</label>
    3 `8 O& O) U' J* l* k# }" _  s
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    - L" j/ q: l6 g! ]2 F' ]5 O* J+ X
  10.   <label for="google">Google</label>. Y$ ]" g7 M4 E6 O
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    ' P2 O* M' i5 {) [- n" @0 w
  12.   <label for="taobao">taobao</label>2 j  j! Z9 r* a) L
  13.   <br>4 M. e! P! A  n- k' n  j
  14.   <span>选择的值为: {{ checkedNames }}</span>1 f# c* @- `: x( R
  15. </div>
    5 W4 W' H6 n- T: ?
  16. : h, f( ^5 a6 _, Z9 o* Y- I
  17. <script>
    & Q. t+ E( b; z4 u
  18. new Vue({
    ) q1 Q- f2 t8 U5 u, N
  19.   el: '#app',: @" ], Q" @$ _- i3 L$ q8 T
  20.   data: {6 _* C. S# Q: d7 p; x, d
  21.     checked : false,, r  A$ N' s6 X, S
  22.     checkedNames: []$ \3 D3 I- w2 X1 v% d
  23.   }8 h7 w7 p1 N4 Y3 P% p
  24. })9 j7 W" e  C% _
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
9 i. a2 X5 i) i+ }" o
  1. <div id="app">
    0 e; C4 @: o3 B* ]" }- g( V
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    " M9 E% _9 i! l8 k% Z
  3.   <label for="runoob">Runoob</label>  }* L, J' G! q- U
  4.   <br>$ ~, s9 A6 o6 j; o. p
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    $ @: c$ x9 d- P7 G- `+ S' m3 k# e& x
  6.   <label for="google">Google</label>
    * R2 L7 C2 Q; Z8 ~
  7.   <br>& L* ?5 K9 ]) }, u
  8.   <span>选中值为: {{ picked }}</span>8 C0 @# V& q8 J
  9. </div>
    3 J  ^: s* H% P3 b: \* k) w
  10. 7 U6 `! C, ]7 r# ]+ `8 D( s3 H
  11. <script>3 F$ a5 y) c4 |& Q7 G9 l4 ^
  12. new Vue({
    1 `) Q  W: B4 X' N0 [- x9 T
  13.   el: '#app',
    3 P# ~: {2 p1 \
  14.   data: {
    ! c% x6 \/ a9 E6 W
  15.     picked : 'Runoob'. T, n" r/ u- h( M( B. T) z. O
  16.   }6 q2 i8 O, a" q. j7 z
  17. })
      d5 ^7 S* A' b4 P, Z8 d
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
8 `8 i6 \0 Q$ _% L( Y
  1. <div id="app">, V3 Z6 H; [4 Y
  2.   <select v-model="selected" name="fruit"># q/ v# y0 W" Y6 r- b  D, \4 R
  3.     <option value="">选择一个网站</option>$ |) _! s  h, \! h
  4.     <option value="www.runoob.com">Runoob</option>. b; k( h% P5 V; Q
  5.     <option value="www.google.com">Google</option>
    5 Y" ?' u+ C, ?3 l* d
  6.   </select>
    - L0 i/ P+ s9 N, {! t& L# F

  7. 6 U& ~  t9 I* w' k- ?$ R
  8.   <div id="output">3 {- M. |! K$ ?0 g
  9.       选择的网站是: {{selected}}. E+ I9 j& G) p4 B9 R! {7 A
  10.   </div>
    ' b2 V3 }0 [3 w# R8 o; T7 ~
  11. </div>
    5 {: G" t( `; D" j! v

  12. & k4 [$ L  T! W' P! J
  13. <script>
    ; X" L! z( x  O% \" Y/ a3 B
  14. new Vue({4 Z/ R4 q; @! t9 ]. a
  15.   el: '#app',3 v+ c  E! D3 `0 b
  16.   data: {
    9 `. s0 U0 v! |. W& K
  17.     selected: ''
    0 T( F8 S8 x( K* a- L1 k) }1 c
  18.   }: ?5 h( ^. b& q
  19. })
    / e! J( }7 |1 {3 \# M, b
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->& X6 ?1 `3 r; t7 ?/ r
  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({5 Y7 ~4 j( @1 H# l  H
  2.     el: '#app',
    ) o# o+ H3 c" d- O
  3.     data: {9 D) b( A+ Q9 Q: n4 I% @
  4.         checked: false,' O# }/ H; @0 g4 Z8 [. v1 C
  5.         checkedNames: [],
    9 i. S( ?6 y3 j! V7 j# B# x! ^& }
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    7 ]! N1 f/ t  ?6 X9 O
  7.     },
    7 L7 J* V# i. W: ]* f
  8.     methods: {0 q5 V( ]5 x9 B
  9.         changeAllChecked: function() {; j2 |7 \1 _, E  N' D
  10.             if (this.checked) {
    ( i' u  \0 c6 J6 M. C3 X6 o1 I
  11.                 this.checkedNames = this.checkedArr  x* Y; x: w$ _0 W8 }
  12.             } else {/ o; \6 g6 V2 l, X6 X, j( S
  13.                 this.checkedNames = []
    , J# d) l# Y4 b6 @
  14.             }+ r  y) c/ ]2 ?  P  J+ T
  15.         }
    - K( q$ T; }+ `! {  d* r' [
  16.     },3 b1 B9 p8 P+ _) m, S
  17.     watch: {* I6 @+ g5 N, n1 r) t2 f
  18.         "checkedNames": function() {6 U" Z3 B' X) X) I9 p6 q
  19.             if (this.checkedNames.length == this.checkedArr.length) {* ?+ z+ j6 H$ V8 R# Q! J
  20.                 this.checked = true, c5 G0 h; a+ E; ^8 c
  21.             } else {
    , G* U8 ?( {% R/ o. H
  22.                 this.checked = false
    ) m9 }% T- L# P  _' E$ T
  23.             }
    4 F& X. K* @  _7 P0 K6 O: l
  24.         }/ q4 H8 @6 Z/ Q! x
  25.     }
    9 T; R9 {4 }( P7 M% E8 h& t( B
  26. })
复制代码

& Z" E/ f$ f6 }; p! E- |7 L6 F" `0 h. r& A% E4 T

7 C9 ?7 [# r: j- M9 h- ]
2 `# R3 a5 }( K" Y  q3 T9 L. w) O3 W
: Y- S# F/ |1 K& k, g

% e6 x: T" b& o: m! |) E" e( q0 B. D5 @: u$ Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-23 02:54 , Processed in 0.120211 second(s), 24 queries .

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