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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

7 p$ F- k* j: s6 p5 N4 S4 d
  1. <div id="app">
    4 C" v5 a" w( Z2 Z3 e, O# y
  2.   <p>input 元素:</p>7 ~) x- Y( I  R% X/ L' A9 B, ?- ?
  3.   <input v-model="message" placeholder="编辑我……">0 \4 z( E& u# F3 e
  4.   <p>消息是: {{ message }}</p>3 o! N. g, f8 w& K5 ^" Y# H+ ^6 l
  5.     . j# c9 s  S0 p( P' y' i
  6.   <p>textarea 元素:</p>
    / y6 H4 U+ b) \; D5 R1 t$ D
  7.   <p style="white-space: pre">{{ message2 }}</p>
    7 c6 ~8 S; ?9 z+ |; Y+ }/ m  V7 K# q" x
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>+ W" k3 r3 @# l
  9. </div>
    8 o% _, [6 h) D" u- c. T: ]4 z
  10. " u% S" o0 e5 R) d
  11. <script>4 {9 J1 w0 _+ Y
  12. new Vue({- |8 F# O* }) V' U; k& j" Q: M7 N
  13.   el: '#app',
    8 v" D% p+ e- S3 b- j4 c  J
  14.   data: {3 `7 G3 w. \0 y$ P$ ^) u) I
  15.     message: 'Runoob',5 q5 g- j  t8 K& t3 s, O
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
      I' T7 D& j; N: t$ ~
  17.   }
    : B0 h! U( D2 r5 i
  18. })  \. w. _1 v1 U( }) O! V. j
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
/ V1 L4 @; J9 e
  1. <div id="app">4 |. n6 x8 v- `! k* D9 c& [
  2.   <p>单个复选框:</p>* n7 G* F6 f# ]
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    + ^0 e! s# E# \; D6 n
  4.   <label for="checkbox">{{ checked }}</label>
    - Z' O5 ^! Q9 Y
  5.    
    3 @0 y, r/ L3 D3 x# y+ _+ J
  6.   <p>多个复选框:</p>
      N( X9 K$ P) m4 R* q: M6 E
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    # P- n; V. d# M6 c) e) s
  8.   <label for="runoob">Runoob</label>% ?; x2 r* o* M
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">: P4 F4 _$ U8 h; T: l
  10.   <label for="google">Google</label>1 h/ v* ?, _% n9 j% X& a0 P2 d
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">, m) I' a& ~; c
  12.   <label for="taobao">taobao</label>
    7 x3 C1 O& H- W) x$ ~7 ^
  13.   <br>' D# g& {( r( b6 ^) E/ j' X; E  f
  14.   <span>选择的值为: {{ checkedNames }}</span>
    2 T- ?* x# E3 R0 }5 c1 p- G3 o5 r
  15. </div>: ]5 m% A* ~) o6 z1 w2 k
  16. ( Q2 ?4 l# K1 m, U5 Y7 i' v
  17. <script>8 \2 B/ H8 L8 g, v& D( K$ F
  18. new Vue({
    8 g$ S( A$ I. h% Y
  19.   el: '#app',. h  P2 @: u9 Z$ M# u6 H( f; H
  20.   data: {
    . Q/ h; [, i# |$ e
  21.     checked : false,
    % o" I7 o+ v8 u4 S) c1 C; h# e& `
  22.     checkedNames: []
    4 @4 F' n, u" I) b9 F# u
  23.   }' O4 z1 t7 N3 W# K, A! d
  24. })
    8 p4 _$ i9 J" ^/ Q) i; X
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
2 w: y/ N. x$ X* A0 G3 u
  1. <div id="app">
    ' t4 f0 R4 Y! t: \- O* r9 a
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">7 i, [* E: q/ L6 m5 E0 f& f
  3.   <label for="runoob">Runoob</label>6 e6 i) ?& h' C) M3 o
  4.   <br>
    % C0 O$ j+ l. j- ^
  5.   <input type="radio" id="google" value="Google" v-model="picked">6 w) w$ o0 A) m. H/ r$ {
  6.   <label for="google">Google</label>
    - D  T, j' _* p$ F4 ?7 f
  7.   <br>* C2 j, G4 G6 C& M0 H  `; h8 q: o
  8.   <span>选中值为: {{ picked }}</span>
    + c7 {3 e, ?1 p1 v+ D6 U
  9. </div>' R! H% o8 K3 W" w
  10. % z' M% v! Y3 _" o, N, z
  11. <script>! ]1 W+ \* P; ?  C9 x
  12. new Vue({
    + b0 H8 T. M4 A' H7 z) c
  13.   el: '#app',4 j0 f8 }7 j  l; a5 e
  14.   data: {  t5 _% j1 m: `0 E3 b
  15.     picked : 'Runoob'
    3 t* q1 t. A+ z& R
  16.   }/ U9 Q! ^" S& q# j1 w( S$ H
  17. })
    4 U! q; l7 J1 ^" ?$ p; s
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select& [9 p% I* f  b/ J/ Q$ T
  1. <div id="app">
    . z9 l8 K% n3 l. P
  2.   <select v-model="selected" name="fruit">3 s3 h* C; ?* Q1 p6 u* {, x: I
  3.     <option value="">选择一个网站</option>
    / C5 p1 n3 T3 n4 M& f
  4.     <option value="www.runoob.com">Runoob</option>
    0 O; x- C+ i+ H. L* j) T# y
  5.     <option value="www.google.com">Google</option>
    ' j1 e6 M& f; `( T$ l. g$ Q
  6.   </select>
      I7 W5 v/ w% P/ y0 O

  7. ' p* p, D9 }- Z
  8.   <div id="output">
    $ {- L# J$ V5 I$ f+ A
  9.       选择的网站是: {{selected}}+ H% _  o7 k- ]+ U' R
  10.   </div>
    ; d1 j* R4 n& J/ T0 V/ _* X
  11. </div>
    4 f) _/ i" O: t8 L2 t; @1 Q
  12. . c. `. m, j! R
  13. <script>; A5 o: e1 X* w9 [. G
  14. new Vue({
    , G. x+ ?  k$ ?& \7 u3 x
  15.   el: '#app',. {( J/ _4 ]/ ]3 E9 f9 d# a4 q
  16.   data: {: h6 E0 B$ M$ A/ g1 \! P8 r
  17.     selected: '' 9 T/ {- o7 k5 Q
  18.   }
    2 {+ q$ N9 c$ N6 v" p- c
  19. })
    # o# ]1 \' ]: `7 b+ b; P
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 --># U; ^; \# o' W3 g+ @. m
  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({
    + Q- _- w" ?: A! _4 D
  2.     el: '#app',3 k0 I( _1 O$ N! M. u
  3.     data: {
    : w8 P* Z0 b  q
  4.         checked: false,
    5 y1 F. q" l; r+ p7 m* n
  5.         checkedNames: [],% _. F$ P3 x2 v& w3 a
  6.         checkedArr: ["Runoob", "Taobao", "Google"]% W2 D/ {2 T, J% K) w& N& |
  7.     },, F( U7 {( V. r2 f1 ]
  8.     methods: {# e' e3 f1 k6 b# Z3 W
  9.         changeAllChecked: function() {
    : W8 ~  R6 I9 b. s
  10.             if (this.checked) {
    ! B) Y' F; Y3 s. x" \( Y6 y
  11.                 this.checkedNames = this.checkedArr- n) K/ H1 y7 f8 I* q
  12.             } else {
    " `1 B; A) {, g7 Q
  13.                 this.checkedNames = []. q$ C6 G& z% X+ M+ Q0 A# y; d! _
  14.             }5 d" Q9 I0 |8 @' R/ Z9 r5 C
  15.         }
    ' K: r" I0 C! e8 L" ]% E! ^5 W
  16.     },
    4 Y6 Z9 m1 t0 H0 Q- A/ d: L
  17.     watch: {
      F2 x$ o. ]( g, ~. h) |
  18.         "checkedNames": function() {
    5 X$ s+ j; B* X) Q0 V
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    1 J2 t  [, Y+ T* G( R# X) _
  20.                 this.checked = true) m, t% C5 K4 I1 I
  21.             } else {4 Y) J+ F; B' c
  22.                 this.checked = false
    5 m$ s* p- u1 r  k& J
  23.             }
    4 L' H" t4 ]9 M/ c6 a
  24.         }% u& _* Z; Q8 |5 `
  25.     }
    $ B8 d5 Q* H# B+ ~! H
  26. })
复制代码
* h. e9 Y$ S  |) ~( S8 J
- S: C5 G, r! L1 j/ N( h
2 h/ w9 w: }% o; x3 t$ Z
' l# v- s) M0 v2 e) H& S; a
; s+ S- ?; d, q+ _/ @6 T% K

4 C6 m; P; s0 Y1 p; q
/ n7 r. \( M5 l) @
7 O; Z1 ]0 e; |$ ~6 E: |. d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-19 23:52 , Processed in 0.145286 second(s), 23 queries .

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