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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

* ?' ?4 b( s% M1 K& w
  1. <div id="app">! ]0 E3 `( M7 o
  2.   <p>input 元素:</p>& N0 [' }$ w1 z
  3.   <input v-model="message" placeholder="编辑我……">
    5 ]1 w( ?5 Z' ]
  4.   <p>消息是: {{ message }}</p>
    ; `* B: g5 }! [  `& S+ t
  5.     ) r, |, C9 T  a) ?
  6.   <p>textarea 元素:</p>
    - \% D. \2 O5 C+ ^
  7.   <p style="white-space: pre">{{ message2 }}</p>0 ~5 l2 c/ }, Y! G' S' e
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>- K+ {( G# f' {) U! [' t: J
  9. </div>
    2 |+ R$ X1 d* m' w  {' T% B  L
  10. 8 q" ]- C+ x/ U  {% v
  11. <script>
    ; X+ B1 D2 X) ]) a; Q$ c
  12. new Vue({
    , |& R5 d2 a2 X9 o4 P" E4 W
  13.   el: '#app',
    4 n4 H7 g8 d2 I  B
  14.   data: {
    4 a' R/ t$ F$ B, r% T
  15.     message: 'Runoob',: j; z2 e+ D: y1 t5 S# @! d
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    / [- D2 C' Q  F( X( I) w
  17.   }9 m3 J3 U) v. v& X$ d9 l- W
  18. })
    # Z. k! f& ?% C4 p
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

" Q. N7 i/ w& G
  1. <div id="app">; |! n6 x9 y$ m
  2.   <p>单个复选框:</p>% T! ]3 m" Q; Z' G- Y. w9 J
  3.   <input type="checkbox" id="checkbox" v-model="checked"># F; m5 s- B) t8 L" n% [
  4.   <label for="checkbox">{{ checked }}</label>
    ( b/ t& k: ?2 n) A
  5.    
    9 E4 p! E# I7 e6 v
  6.   <p>多个复选框:</p>* ?: D  x* L8 K" c& \+ l
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    . c- r/ g$ @* G# V6 X8 m9 }8 n
  8.   <label for="runoob">Runoob</label>$ X) p0 L/ l4 q2 z2 s
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    : Q2 t1 @7 J/ ?& ?' F6 I5 t
  10.   <label for="google">Google</label>/ K9 d1 z  t9 o4 q9 x1 T! b
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    . O1 R4 G/ [  ?- R: V
  12.   <label for="taobao">taobao</label>
      L3 W4 {- i; A6 i6 a/ `$ S
  13.   <br>
    - A6 r0 h9 p9 O! a) j# D
  14.   <span>选择的值为: {{ checkedNames }}</span>7 y1 t$ r: N- U
  15. </div># m) k; L: e/ m0 E  L* i. Y# k

  16. . b& V7 }, M* [' F. ]1 ?
  17. <script>9 a" N0 n! l- B# N
  18. new Vue({8 ~$ K1 |. C2 ~; h+ Z
  19.   el: '#app',
    7 ]& a% _5 E9 C  P, q* Q3 L5 d
  20.   data: {
    ( d' U5 j  D5 A1 t) j
  21.     checked : false,+ u/ O+ G" d! y# D/ f0 d( o
  22.     checkedNames: []
    , k* G5 {4 ^' ?% j. h3 j1 H8 F" _
  23.   }
    - }0 [) p3 ]" D
  24. })$ v( D+ Q) p- t/ @# }
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮9 g/ Y  b. }. C" y* v
  1. <div id="app">. E7 [7 f0 ~* y9 F) S* X: e- v3 Q3 W
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    9 O6 J' ]" f$ W- H  C
  3.   <label for="runoob">Runoob</label>( S, n5 V  {" N
  4.   <br>/ M7 T9 z* O$ C8 u; H6 p
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    8 C& w$ [  @0 _" P) B
  6.   <label for="google">Google</label>
    5 l- J( [: v% D8 A
  7.   <br>  x4 d! M, y+ r3 W* k% O
  8.   <span>选中值为: {{ picked }}</span>
    4 _& b3 T0 N) @9 d
  9. </div>$ E3 h. j  l# T) ~
  10. ' Y6 y- O, F& ]/ K: |# U0 I2 V
  11. <script>
    " N& u( S8 ]8 Q; W
  12. new Vue({
    & t. w  f7 ?% V9 e
  13.   el: '#app',
    ' G. x  f  k# u/ {$ b9 a# t, ?; Z
  14.   data: {& Y  i$ X$ |" _3 ?% N8 G  `
  15.     picked : 'Runoob'3 C) J6 X. J2 x% `  U
  16.   }
    & q' }* h6 h# W
  17. }); z+ C* Y* c7 a8 C5 A$ t
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select0 C. @, e/ q! H& C
  1. <div id="app">* l8 G7 s/ j1 W: z3 b/ g: @
  2.   <select v-model="selected" name="fruit">
    : m- X% M, e  a$ L$ I2 ~+ u- t
  3.     <option value="">选择一个网站</option>
    8 |. U( T; I) P
  4.     <option value="www.runoob.com">Runoob</option>7 Q8 y; f% I* |; T0 o; o) d
  5.     <option value="www.google.com">Google</option># _! e  y6 X2 v. j0 y
  6.   </select>
    $ k% H3 |; C4 c% _% o

  7. 7 q7 P" d, y. ~9 ~6 n8 U
  8.   <div id="output">  g0 ]: M* v- y# l5 f6 y
  9.       选择的网站是: {{selected}}) Y# n2 Z( B6 r; Y3 ]
  10.   </div>
    , s, S$ d4 [6 c3 Z
  11. </div>9 o, O% C9 ?1 C! Q# E% v% V# k
  12. 0 }; V1 \! `! g8 d& j. ]% Y( F3 m
  13. <script>% F# e9 ~; u) I2 }- W. X" j
  14. new Vue({: D  J+ g4 Z& ?. ~5 A
  15.   el: '#app',4 n: x: H( E7 B4 A5 k/ Z8 X
  16.   data: {
    ! W' C4 k4 Y& n: }
  17.     selected: '' 6 E! }1 f" D; V& n$ G; U7 _1 o
  18.   }+ [/ }3 Y5 X% V8 @9 D
  19. })0 o; \( [1 c! {
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->1 `. C! l  v" W3 n& N; 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({0 s1 v2 ^4 R: Y" H7 X& t
  2.     el: '#app',9 Z2 `+ W. @( x& w. f# p
  3.     data: {
    1 R6 A% M) ^& u  _% M, J  j
  4.         checked: false,
    % k; K+ O6 U8 U1 q+ r
  5.         checkedNames: [],7 F& p( C& ~5 Q! y
  6.         checkedArr: ["Runoob", "Taobao", "Google"]6 S. {4 m  O% X. p& G7 z
  7.     },, d2 a3 a9 Y: v- F4 t8 b
  8.     methods: {
    3 c' l) G: Z% O+ K/ N& j
  9.         changeAllChecked: function() {: A/ {3 g; ^/ s9 t) w3 |. B
  10.             if (this.checked) {" M* f! J6 k0 w+ W# ?2 ~6 ^" H& \
  11.                 this.checkedNames = this.checkedArr
    & r. r2 {! r- N! i
  12.             } else {+ w& V5 s" w" T
  13.                 this.checkedNames = []; U2 q; A- J9 G) z
  14.             }
    % D1 W; E' D: N  f
  15.         }1 `3 L7 i: w) z- p
  16.     },2 D! _, f7 E0 ^
  17.     watch: {
    0 @* S! K) \- d' B
  18.         "checkedNames": function() {! g# M$ f" S5 K5 x  A1 y
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    4 o+ E" P2 M3 E- d
  20.                 this.checked = true' k: U3 @& {3 i" E
  21.             } else {7 J3 c$ p" V; ~) E1 W- h
  22.                 this.checked = false
    , y$ F/ u0 D6 V- ^. ]6 w' b
  23.             }
    * b; Y* ^+ T$ n# p9 g
  24.         }* b5 B. I7 \& o# k1 q2 `
  25.     }; }0 E3 ]9 r% c5 O' ?; I: j
  26. })
复制代码
, g5 C) O5 I. v1 {  J3 Y' t( [
: A! j; M3 b; H2 @1 ~
: j- }0 _9 m; F: L

1 |$ n8 }2 X& d+ y1 T- D
- @8 q. n6 _2 B0 m# C) v2 V& {1 m% p- u& N2 g' p

. b* H8 D- h: R, ^
9 r: ?. [" P& C- |0 J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 22:31 , Processed in 0.128706 second(s), 22 queries .

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