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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

' i0 b2 D% ^3 ?
  1. <div id="app">
    : y1 c8 X- q! `: h8 N' ^. a
  2.   <p>input 元素:</p>
    ; D) x0 g4 j3 M1 l0 @
  3.   <input v-model="message" placeholder="编辑我……">
    8 _  i( W" r5 {: U
  4.   <p>消息是: {{ message }}</p>
    + N1 B7 ^) |) _$ \/ e; E
  5.     2 ?( ~$ U( J  d' q
  6.   <p>textarea 元素:</p>
    3 @" n& a2 E" s* J( d7 {1 H
  7.   <p style="white-space: pre">{{ message2 }}</p>
    ( \- k* G  I0 [
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>3 j2 A9 q5 O# E) q( e+ X7 N! v
  9. </div>0 v- S) e3 ~$ \
  10. . z# }# K8 b$ Q
  11. <script>* ?( A" {: f$ @: O
  12. new Vue({1 Q" T6 @5 r% k2 ~! C& E
  13.   el: '#app',
    $ M% `8 j2 ^- S% w" l4 ~( j
  14.   data: {
    ! a2 n% y& y( K( w! S* t
  15.     message: 'Runoob'," }9 |. g% ^- P9 ?" T8 f5 K$ z: L
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    - r% J4 v2 Z3 x3 N% q: O1 _
  17.   }
    6 |& i8 k( q; J  o0 J
  18. })0 D/ I' b; O% ]+ q6 Q
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

( O) S, s9 p5 D5 r  _
  1. <div id="app">) \/ w: D$ }, c' V+ w% |' W0 ^2 K, V
  2.   <p>单个复选框:</p>$ ?7 b: j* h# N! L4 |3 M4 {
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    1 Y+ Z8 }2 Z. [, x& |. Z* x
  4.   <label for="checkbox">{{ checked }}</label>! {2 R6 V2 t1 J" ]
  5.    
    ( {* E1 W. D/ s0 C- O/ y6 d
  6.   <p>多个复选框:</p>
    7 T! n; R# ~3 c9 [0 D) i+ h
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    ! b3 R4 s4 |7 ~6 `9 `
  8.   <label for="runoob">Runoob</label>
    + {( r1 H6 {5 K6 w, I
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">- q/ V9 O. t3 A9 V1 _
  10.   <label for="google">Google</label>/ H7 F) L/ N$ @# j7 U, V2 b
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">  N. P! m9 M) J7 t$ o! y
  12.   <label for="taobao">taobao</label>
    # T3 Q2 g2 K8 C6 ?
  13.   <br>6 ]* l4 s( N7 G
  14.   <span>选择的值为: {{ checkedNames }}</span>; v& x, e& \4 ?' M, g% D
  15. </div>
    * ~" g( i! u/ D' s; M/ H
  16. ! n( @! T- ^* C4 K
  17. <script>
    5 {% n% K5 x) b6 ~2 V
  18. new Vue({
    $ o/ z; R; K/ _- w
  19.   el: '#app',
    : z7 U' Y. i6 L9 b) x
  20.   data: {% c& \4 B0 _: s! g
  21.     checked : false,( `! T* U( A& C1 g; P, J* u
  22.     checkedNames: []
    # ?# r& Z( E$ t* z% A7 @
  23.   }
    / k% Q" ?. y) m( x% F# h
  24. })7 Y( ]+ {4 u4 V  O
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮0 a* S! ]- h  L1 F5 [
  1. <div id="app">
    - A5 ]& g+ v/ y8 o& v; T9 g$ M
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
      `9 ~$ v$ F2 _; x- o
  3.   <label for="runoob">Runoob</label>
    - z' e0 `, ]) g  s  @! ~' z& G
  4.   <br>
    * g$ s: A/ u! t( O8 n
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    ( ]% ?; K* c; E& S
  6.   <label for="google">Google</label>1 H! v- X5 U" f8 C9 Z: j/ \0 C7 Q) j
  7.   <br>
    . h. \$ m4 M9 X
  8.   <span>选中值为: {{ picked }}</span>( }' S  n" R$ ]- I/ D8 [
  9. </div>! y( H  }& i( c6 w( N8 |" C  |

  10. 2 l4 D, Y$ V6 O9 m6 d( [$ l; b; P' n
  11. <script>- Y7 X1 T! A& n; ~- C% _
  12. new Vue({4 @' U  c1 ^/ o1 _
  13.   el: '#app',
    7 W9 l/ ^& V8 |8 }( Z: ?0 G
  14.   data: {' F6 T$ ~: u0 w; a- f9 f
  15.     picked : 'Runoob'' v1 k& g" k' {$ S+ Z; g
  16.   }) X( H0 W/ k" Q
  17. })
    6 C7 w: A% I' S* Y0 k2 n3 {6 R
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
8 D, x. J6 J9 j3 a' X% }
  1. <div id="app">
    . @4 T  }3 Q3 z! s
  2.   <select v-model="selected" name="fruit">
    4 o$ t, |7 Y$ c* Y" A9 J, x- o6 s5 b
  3.     <option value="">选择一个网站</option>
    ; S9 u9 x$ W& a$ U. F
  4.     <option value="www.runoob.com">Runoob</option>
    " S' P$ }+ w# O9 J
  5.     <option value="www.google.com">Google</option>
    : E' r! B4 F; b7 C  R: S' Z
  6.   </select>
    + n# K( [2 G" t4 l! o+ w6 r8 z8 x
  7. * y0 v3 l. f. P& k) F$ M, c
  8.   <div id="output">8 r# \' @8 i8 {
  9.       选择的网站是: {{selected}}
    6 C; i; I( v8 f& ?$ y
  10.   </div>+ {/ a! _8 d( u, z- U+ ]
  11. </div>
    : l2 M: K# A8 n+ H# W  D  D- _$ w
  12. 4 L! S6 I0 E# ?2 z# @
  13. <script>& P  A. H7 s! R( S, y
  14. new Vue({
    + \! T$ G5 U. |4 g
  15.   el: '#app',# x5 w$ _( y) {' x2 m
  16.   data: {# e6 e; Z7 R4 E3 H: L/ e. m
  17.     selected: ''
    * s* P4 B( r! L" c  X3 {
  18.   }
    & x7 h+ \3 D( T( t) a) R
  19. }): |% G4 Q4 R5 {* S. w
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->0 q- s# R& O& a( E; P3 w
  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({
    * c- F, B; {. |4 x' l& T7 C+ |
  2.     el: '#app',) u; J5 r1 U* l
  3.     data: {* u6 |( o( P& ]- y- Z  H* c
  4.         checked: false,
    4 S7 P0 g3 B7 y( v4 w& [. o
  5.         checkedNames: [],
    6 _( V9 H# \' h; L
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    * M0 |' h4 O3 q+ V3 N
  7.     },
    ) A  w4 I. ?9 Z+ g% N1 _4 s% [
  8.     methods: {
    ( i1 S( j* J1 b8 i
  9.         changeAllChecked: function() {/ s) X& ^! ~: b- g/ i0 `8 f
  10.             if (this.checked) {
    0 y) d6 s1 @% W# J/ l0 h; X
  11.                 this.checkedNames = this.checkedArr7 M0 v& y2 k' r7 b# C' h
  12.             } else {
    9 ^) U% p: D0 [$ s: S# d" @
  13.                 this.checkedNames = []/ r: [3 ?9 o9 y6 N
  14.             }
    6 E9 [+ D) w% a8 b
  15.         }
    , Z4 \+ ^! {% N! Z
  16.     },' N. ]" k  K/ D% q9 ?
  17.     watch: {9 \/ |/ l( v6 ~
  18.         "checkedNames": function() {
    + K& K) Y" H' M7 N, R! s( c
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    % n& _6 V! \9 b- L5 }& I" c
  20.                 this.checked = true! C9 |  w0 c. `
  21.             } else {
    - G) A: t; y5 }' t0 W. I* l3 a
  22.                 this.checked = false6 H# }* s" i9 Z( g, @
  23.             }
    2 I( m: x3 f; ]! j$ ~) Y
  24.         }
    1 j2 G! w# U9 V8 y/ ?
  25.     }
    ( x9 C* q; n% p" m. L
  26. })
复制代码
% h* Z6 A. E: J5 v0 @0 {! o
9 e5 l: K0 c: b. I; r3 h* ]
8 u& K8 Z( d" Y/ `8 F: T; S

5 P: G5 \0 T. l+ q( V7 O3 @# [3 e9 o, O  P/ q( L/ R7 Y6 q6 P% d
; Q/ ]: ~3 }! \
" m0 \' `' Q1 q2 R

8 Y, U- z! Q% g; }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 13:37 , Processed in 0.122637 second(s), 22 queries .

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