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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

9 e. V" \1 ?$ A# P
  1. <div id="app">
    ; O) y. ~( r4 k" J% m! C4 F
  2.   <p>input 元素:</p>  K: _% i8 R: ?! p& ]$ B, u# N
  3.   <input v-model="message" placeholder="编辑我……">
      C$ R) Z2 p# @2 i3 j
  4.   <p>消息是: {{ message }}</p>8 y/ Y8 ?& _" F
  5.    
    ; _- a& [% h5 T- M
  6.   <p>textarea 元素:</p>7 B2 v( A  {7 I0 O1 w$ Z
  7.   <p style="white-space: pre">{{ message2 }}</p>' o$ X4 n. a4 a  |
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>  e" c) F& T3 M9 C. w" l
  9. </div>
      |2 F9 T7 `( p9 y" E: G( u

  10. ) m4 S4 C5 V  b# ]7 w( ~; t
  11. <script>
    - b; G7 {) s0 C
  12. new Vue({
      J5 _- R: u9 S4 B" r
  13.   el: '#app',& M7 B8 }0 h' I, n3 o( [4 c
  14.   data: {" o$ U( e( X: f
  15.     message: 'Runoob',
    0 D- |! a' l8 M" J/ Q/ p. X0 X
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'! J) q+ ]* r9 ?: k
  17.   }
    8 x$ b. s+ a& f8 Z
  18. })
    5 F; y0 x, x$ [0 h7 o, l
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

1 Q. l, _6 h: B; Z7 ^
  1. <div id="app">3 d1 |8 O5 m/ O4 `% F0 `
  2.   <p>单个复选框:</p>+ Y* g2 i7 n& m7 y! I3 g
  3.   <input type="checkbox" id="checkbox" v-model="checked">* v7 V5 v8 ?+ p
  4.   <label for="checkbox">{{ checked }}</label>
    7 {9 T3 M( V) ]# J) K" G( x( ~0 R' Y& g
  5.    
    $ O- Y% ]4 W, i" g
  6.   <p>多个复选框:</p>
    $ d' M& X0 d  x& _) I! M
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    , ?& P1 R( a" y5 V
  8.   <label for="runoob">Runoob</label>
    8 T. p& G- A# \& y; _. Q) H( F
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    ) A+ ~8 t6 @; i2 G1 n1 B6 q# K9 j* \
  10.   <label for="google">Google</label>
    # p: u$ v/ a( i" M) h$ w1 z
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    - O2 v* Q! O3 Z' o8 n/ F& [& f
  12.   <label for="taobao">taobao</label>
    - V5 `; c# V" E) P7 {6 f
  13.   <br>+ t0 p- L' w% N8 x
  14.   <span>选择的值为: {{ checkedNames }}</span>
    " z: q' W# B# Y# B
  15. </div>
    . |* U" b" \1 W8 j! G5 e2 V) B

  16. & V9 W# e; V+ J9 x9 w
  17. <script>
    . s: r: r0 S2 h8 c, h& b! G
  18. new Vue({, r1 y4 ?/ [5 Z+ N
  19.   el: '#app',1 I. S4 V6 z0 X6 n  c, U
  20.   data: {
    ( m  v1 K# a% q+ ~# c* e6 H
  21.     checked : false,
    8 K2 D0 g8 X" \1 c0 A4 l! w
  22.     checkedNames: []6 V, M  D/ P, z# Q
  23.   }
    ( |+ h, ]' Z* t$ U
  24. })
    4 h. ~" D0 B  z. _
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮8 n, D' p9 s2 _" P  x+ Z7 X
  1. <div id="app">5 W9 ~, J0 L0 ~+ j3 v* w
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">7 G  k/ q, q5 B9 H4 R
  3.   <label for="runoob">Runoob</label>
    ' |9 p( I! m1 j2 W+ \7 F" i( C) `+ X
  4.   <br>
    , {6 Q. E3 h5 [0 C# I4 r5 s
  5.   <input type="radio" id="google" value="Google" v-model="picked">& [5 F" v2 l: u) c. T' Q+ K3 d
  6.   <label for="google">Google</label>
    # J7 B9 k0 W. p4 b" `( G( ~+ \
  7.   <br>
    - S3 e2 ?9 w2 _
  8.   <span>选中值为: {{ picked }}</span>
    0 m& a7 D7 V* n- K  y) {6 M1 E
  9. </div>: g8 b1 |1 Z9 o+ k
  10. & l0 r7 n" z+ {' c
  11. <script>
    - s7 F$ ]6 ^9 E4 V' q
  12. new Vue({
      P8 K. _9 A/ d2 M) n
  13.   el: '#app',7 S" j4 |$ f  d2 p7 n/ N6 S
  14.   data: {4 M+ J! a( U( i
  15.     picked : 'Runoob'
    2 ~9 X: W, ~0 {( `  Z) f
  16.   }
    1 m* y4 @0 L; H/ {" G" ]
  17. })( Z- l3 K8 s  @5 B% d7 d& u: b2 P
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
2 u, Z) n: F3 w" [
  1. <div id="app">7 }$ o1 N" Z- d! i
  2.   <select v-model="selected" name="fruit">
    1 i( `2 N' D% I3 u* U  Y) k
  3.     <option value="">选择一个网站</option>5 ?5 J3 e3 H+ x% i" j3 M
  4.     <option value="www.runoob.com">Runoob</option>
    2 ?6 @" j6 M# `" s9 R) b
  5.     <option value="www.google.com">Google</option>; E3 k5 k2 ^  R
  6.   </select>
    9 K* C( H1 D" t- [

  7. & X# @* L" o5 k( @( g. b9 {5 l
  8.   <div id="output">3 z! m; ~7 ~2 O* c/ e* q9 J( C: b* {2 f
  9.       选择的网站是: {{selected}}
    + T5 b0 J/ j' g- ]) M
  10.   </div>- H3 r& L8 P1 L3 \, \# R5 Y2 B4 t; u
  11. </div>
    " X0 {4 G  }9 F% U

  12. * {6 k+ N( e0 b: F0 Y4 c) z/ z
  13. <script>. J0 V' \* c% a5 l( Y2 g- g- m
  14. new Vue({  R2 k. ~1 Z' ^0 f
  15.   el: '#app',8 c( ~6 [, C# w; X9 t  X
  16.   data: {
    $ Y  U; M2 t, f) F* K+ y3 i' S
  17.     selected: ''
    % K6 _1 b' o5 Z% a4 E" S" v( [
  18.   }
    9 z# a. q/ ?  I& e$ V1 O
  19. })0 w" y8 @! w% _% K' z' @" V3 o8 Y/ U
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->. `2 T: R8 w: x$ q/ G* x$ z
  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({
    ! |/ x1 f" `, @) k& I6 s( e9 D
  2.     el: '#app',
    / w. n, C5 n! l
  3.     data: {
    & Z  f- `# n, U6 s6 @1 ^$ q# ]& d
  4.         checked: false,6 K6 Q2 v, Q& g# |% Q7 O: _
  5.         checkedNames: [],
    9 n0 r  W* i+ e, n; F
  6.         checkedArr: ["Runoob", "Taobao", "Google"]7 \8 _3 ]- b& @  c9 I
  7.     },* ?6 H: i+ l5 y4 d  b
  8.     methods: {1 J3 T" a0 _& e4 |: ~- E5 g
  9.         changeAllChecked: function() {8 \5 E) T0 [7 {. U8 i
  10.             if (this.checked) {
    5 n3 k- v" C2 U
  11.                 this.checkedNames = this.checkedArr9 S; o$ s4 j6 W; ~$ ?
  12.             } else {0 l  y/ J$ y( B+ e7 ]& u6 ]
  13.                 this.checkedNames = []' t2 f* u% Y5 c0 ~; N. J5 S
  14.             }' w3 ~# c# F1 P$ x+ p
  15.         }
    7 ]5 _& s( ]& \8 y
  16.     },
    8 ?' }/ X9 j& ?4 h
  17.     watch: {- c; t# F7 ]1 z! t6 E- u& M: @
  18.         "checkedNames": function() {
    ( C% n5 Y$ z, c; x
  19.             if (this.checkedNames.length == this.checkedArr.length) {1 M( e7 w# Z; V
  20.                 this.checked = true; p; c! b& M6 b) O' ?
  21.             } else {
      `9 n4 N' I; l" U: K
  22.                 this.checked = false
    . G7 ~# j3 H7 _6 V/ s+ @
  23.             }
    + G- }, g6 ?$ A# p0 Z; s% S, \
  24.         }
    # N" a" c' b: V: _( W  `7 P3 X
  25.     }% `  {+ x7 `/ `! I: y
  26. })
复制代码
3 _; S0 _0 T, `3 M: |+ j* c. v
. P) `. x8 e* i) K/ J

. V' S% T% i! ^  p2 c
4 S. t( ^; H6 f; ^! K- K7 _9 x9 d. E& ?+ w, s: i

3 @  S- ^' s3 u. f; ]9 }2 Q
3 x0 m% I" K; M  Y2 H4 W9 \- c0 F0 f8 }" L, {6 Y# V# |' v4 F4 \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-6-20 01:21 , Processed in 0.059131 second(s), 22 queries .

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