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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

5 \# a' u: o; E) ?
  1. <div id="app">
    : L# s3 ~6 U( h9 F  j  o# \
  2.   <p>input 元素:</p># e1 q+ O9 U5 H0 d2 e) D1 `) R: q- T
  3.   <input v-model="message" placeholder="编辑我……">
    ' G  |8 _& b" H
  4.   <p>消息是: {{ message }}</p>
    % c+ `% C; m8 L( \9 l( \# V! a2 j
  5.    
    . @1 X, a  K4 i; ?; e
  6.   <p>textarea 元素:</p>
    : K0 C4 k7 W6 q
  7.   <p style="white-space: pre">{{ message2 }}</p>
    # n4 y  H% J) B8 Q6 J8 B- e
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>6 M4 k' B# n( z3 x9 n! B/ W2 h; f
  9. </div>' t- p& c9 q9 E/ W- b
  10. ' T7 A$ x+ d9 A% u0 k4 z- p
  11. <script># ]1 d, f1 C  t$ ~3 y, y4 K- f' v+ R
  12. new Vue({; [7 m* {3 A! P9 ?) x9 a; o1 ]% H
  13.   el: '#app',
    & ]4 e2 z' |3 k  o, {
  14.   data: {
    / L5 {- H; k. v2 ~1 F0 J2 `
  15.     message: 'Runoob',
    ! j2 C' z$ R' ?7 f
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'+ i( L! L. `" }" [: b9 ?; K
  17.   }; |- x& L# ?" d$ q
  18. })- X& R! g' s3 B4 E3 e- O
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

6 e$ C) d& t( R2 W
  1. <div id="app">
    1 h6 s. z$ }; I9 d
  2.   <p>单个复选框:</p>" R; ^- E1 P! |& d/ ?) {
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    ; Z1 n7 {: q: B) S9 ^4 N
  4.   <label for="checkbox">{{ checked }}</label>  |$ @  ]5 {0 D2 |/ k4 W; ~( q
  5.    
    5 M; ]0 o" a/ l$ D- P' E: }
  6.   <p>多个复选框:</p>
    6 i! P# [# k  J& D% a
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    1 T- W  T# ?5 [  O3 l( J
  8.   <label for="runoob">Runoob</label>
    6 ^# b2 ]# z# W) K8 v- v
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    1 x/ g) j$ R- S3 F/ n
  10.   <label for="google">Google</label>
    # l1 f3 ]1 w4 l8 Q: t
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    " n7 v: S2 X  j) g  v
  12.   <label for="taobao">taobao</label>! I' q6 O. r2 ?. `  X9 X7 b
  13.   <br>, q  h4 i# S7 [; F; m6 \1 i- X
  14.   <span>选择的值为: {{ checkedNames }}</span>
    / h+ Z. I1 e1 r9 y
  15. </div>
    . D2 k8 M* w5 v( ?3 @6 Y& q

  16. ) v" j9 x) J5 A
  17. <script>2 _; h, ]' T! w" l: k" r: ^! ?
  18. new Vue({6 u) H$ f. k* j$ M5 ]7 p
  19.   el: '#app',
    : v1 O  D2 r* u6 {6 C, P
  20.   data: {2 }) g+ g, H1 t
  21.     checked : false,
    0 k8 B4 S: f. ?& J  X
  22.     checkedNames: []
    ! d, F" l' Z$ ]0 T# }9 d2 _
  23.   }& j3 ]9 M: {! g8 Y
  24. })
    7 `% u) @9 K, F( G
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮* b3 x: k; I3 _9 u% W1 l
  1. <div id="app">) L7 |, z' b% V1 G; v4 Z& Q. @: I
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">5 r9 w$ u8 |9 B; e) E# i
  3.   <label for="runoob">Runoob</label>( H9 `$ B: [* I! D+ y. x- @
  4.   <br>0 u$ f- }) @! }' p# |
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    3 a9 l* j% A5 @& c2 C7 P+ `) C
  6.   <label for="google">Google</label>
    + ~% Q3 [6 l  R+ O2 X
  7.   <br>& n/ z# `: N7 U8 Q0 x1 L
  8.   <span>选中值为: {{ picked }}</span>
    ' l9 V' t& x2 X% V( m" v  ~
  9. </div>
    9 `3 G# ?, _% `

  10. 3 e* ?# a$ b' a
  11. <script>
    . g: a/ W$ r! p* E
  12. new Vue({% L6 e- @- d' F6 ]7 R0 \
  13.   el: '#app',/ O0 ^) K9 E8 V- g' M9 W
  14.   data: {
    ' U( M' E4 ~7 ?6 b" e) ^
  15.     picked : 'Runoob'2 U2 Y0 H' |. V8 B) w/ H
  16.   }  b, w! }0 F9 E6 p( M3 b9 _( p$ v
  17. })' |8 T$ O9 r: h2 y4 T! l& ~( y
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
: C' A& \# I2 J& f8 Q3 G! x+ V
  1. <div id="app">% ~5 g+ E9 z# V# |; I/ V
  2.   <select v-model="selected" name="fruit">
      V" w" k5 V4 u
  3.     <option value="">选择一个网站</option>
    " u5 b: f# R* q% w7 p- q6 }1 H
  4.     <option value="www.runoob.com">Runoob</option>
    ' U1 I9 |  \4 r0 w) T. M7 G
  5.     <option value="www.google.com">Google</option>) V; \9 k: Q( x* c5 b
  6.   </select>! }# }# a" ]6 T
  7. 1 {$ D. _, J( z4 b
  8.   <div id="output">; G3 M; ^/ T* ]5 X  `
  9.       选择的网站是: {{selected}}
    9 z- c. t  H% L# |! a' E' n
  10.   </div>
    : |% L6 p2 @6 L
  11. </div>
    . Y! q7 ^2 _5 ^! K! l
  12. 9 Y3 k% f+ M( _; v& _7 M8 G
  13. <script>9 q# W. H, I" Y4 A+ u: h" a% q( ~1 T
  14. new Vue({9 _4 ^8 {. d% o  }* j+ y% b
  15.   el: '#app',8 [- R  K% U3 u# T2 j1 S( r
  16.   data: {
    % Y" Z( P2 J7 L* p" r
  17.     selected: ''   h  r- L8 t: _; z( A. h
  18.   }
    1 C, E3 O  `8 Y
  19. })
    $ \5 v& c% ]( D: U( D7 W
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->8 A6 B# @! F9 ]6 T6 _# o. 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({
    9 d# B2 T+ f9 i) z
  2.     el: '#app',+ f1 d5 U9 j3 a* u/ ^% x' [% ~0 W# c, i
  3.     data: {+ e2 `2 m: _4 L( w4 s! z. m& d
  4.         checked: false,+ S' }. p1 u2 R/ G6 _
  5.         checkedNames: [],# S0 ?& h9 z6 J/ g, e7 ]9 P
  6.         checkedArr: ["Runoob", "Taobao", "Google"]# S2 R$ Q# N3 ]9 d! V( I
  7.     },
    / v, @; h( z# U$ ]( l
  8.     methods: {7 @# u& f( W1 d* z# p) O+ m
  9.         changeAllChecked: function() {
    ; m9 i( }* x) T" C3 E
  10.             if (this.checked) {
    4 x" z% o' s3 U8 r( u
  11.                 this.checkedNames = this.checkedArr
    4 Q; P$ r& y) c
  12.             } else {
    2 t& Q* V" o. z* P% R
  13.                 this.checkedNames = []
    ' B7 P' d5 x# o5 J7 _( \
  14.             }4 G# m0 v$ g9 g  N( T; ]
  15.         }
      c: X6 e9 @$ M# V! E
  16.     },
    : i( \8 B6 ^5 x; f
  17.     watch: {0 r3 R# e2 Y$ k8 T& ^" n
  18.         "checkedNames": function() {
    7 B( L& n- i1 u: N" z
  19.             if (this.checkedNames.length == this.checkedArr.length) {" J1 o* V; U$ b  j; t) @
  20.                 this.checked = true/ ^, c  u* o8 a: w. L' H! s
  21.             } else {4 s+ M* l  Q/ ]* n: @/ W6 @4 x8 A
  22.                 this.checked = false
    ' O9 O( g& D; h0 g9 v8 P
  23.             }
    & j/ Q. c2 c5 ~& S2 O5 {) D4 G! e
  24.         }9 e7 @0 {% T5 }7 ?1 N9 a$ p5 y. d
  25.     }2 R. F  Q+ N8 N8 }4 T
  26. })
复制代码
- I3 P+ e! a( \) W

/ a7 ~! ^* j' w. h) z7 M$ x# j9 [1 X; `& ]( e

4 O, ?0 n. ~" {. U
8 Q/ r  u( J, y) \' H) r+ T7 \
1 i( B% V0 b! A0 s- K; S
$ P9 J) C7 O" L  Q0 U  E8 L' t) v+ v6 R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 21:46 , Processed in 0.071351 second(s), 23 queries .

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