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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
2 R  c& C" K- @; s3 |" ^
  1. <div id="app">
    ( u2 {0 _  ]0 r6 c
  2.   <p>input 元素:</p>; i  w' l( B# Y# M# J
  3.   <input v-model="message" placeholder="编辑我……">
    - m2 R4 D3 Q5 k! d- ~/ n) h
  4.   <p>消息是: {{ message }}</p>
    2 q" O0 A) F. S/ n0 m
  5.    
    : |9 j, v8 s  ]( ^: U7 T6 o
  6.   <p>textarea 元素:</p>
    9 V0 ?  M9 I2 G& b5 F
  7.   <p style="white-space: pre">{{ message2 }}</p># W4 |. P: B  [1 o& a
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>- X4 ]7 U4 ^" c
  9. </div>
      r* j2 ?1 W+ S+ X; h( l/ k
  10. 1 o6 W- p/ [# |: u) c# R
  11. <script>5 R4 E: G& i' c* @0 }! x5 N
  12. new Vue({
    2 w9 q9 ^& K% q& h0 O+ C# |/ v
  13.   el: '#app',
    " X& P. J$ g1 h2 T2 o- @
  14.   data: {" P% ]" r: `, g) A- q5 y2 }& G
  15.     message: 'Runoob',8 U% x: c! s8 z/ @2 _* f5 |& W
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    + y4 r! k# P  ^/ f$ @
  17.   }  x; l0 r9 |* @; ?  O, {! Q3 D  `
  18. })
    - q$ R( U7 G4 E4 h4 ?- o
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

5 h6 W3 S: R4 e3 J) h; V
  1. <div id="app">
    7 m! M% N& S' M9 D( Y/ W
  2.   <p>单个复选框:</p>8 S' A, k6 y' l5 r
  3.   <input type="checkbox" id="checkbox" v-model="checked">; p! N: F, ^. E' P0 S. P, o
  4.   <label for="checkbox">{{ checked }}</label>
    7 t5 _5 T$ ]) r7 h5 {+ `0 s; \3 W
  5.    
    4 j6 g. w- K! y; w3 o( B6 j5 y
  6.   <p>多个复选框:</p>
    9 i) a* H. j7 h0 Z
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    1 ]( o7 E& C( y
  8.   <label for="runoob">Runoob</label>& u" p$ W+ v9 j; c
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    6 m9 x( y9 u9 h; t! O+ ^. n
  10.   <label for="google">Google</label># ?4 R1 G8 s/ ]$ {" G* Q8 B) ~
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    - f: H  T6 K7 `/ Q
  12.   <label for="taobao">taobao</label>
    & y, M8 \' S# z/ I; l  K
  13.   <br>8 H+ Z+ p4 r  w. i& z2 f
  14.   <span>选择的值为: {{ checkedNames }}</span>; t4 _" y4 }: b, \& ^( k
  15. </div>
    ) a9 o) r7 W6 F- ?! G) @

  16. ) b1 U8 H* k$ \: t8 Q% `
  17. <script>7 y; X+ v. |  y* o
  18. new Vue({
    4 Q! }* w+ B; s6 z9 e
  19.   el: '#app',
    1 W7 `: e( D! e0 a8 B
  20.   data: {) E; ?0 f1 J! o" U9 h' F2 u3 }1 d* p. [- j
  21.     checked : false,
    - F- ]& [' ], s. k! ^
  22.     checkedNames: []3 N. x+ ~$ I/ w( g
  23.   }2 @6 C! H% T& U- r9 k  J
  24. })
    ' J4 B3 E7 A5 j
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
* r3 k1 o* p' }/ x% X; F
  1. <div id="app">
    9 B3 i6 S' {$ F* u  p" N
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">6 }5 O2 f0 f9 ?/ U' j0 `+ d0 Q
  3.   <label for="runoob">Runoob</label>0 Y, i$ i5 [) D: B8 p
  4.   <br>
    - v$ V0 g* r& |8 @% n
  5.   <input type="radio" id="google" value="Google" v-model="picked">" e* ^+ N  [3 |3 G  j2 ~
  6.   <label for="google">Google</label>
    " y0 {+ j1 |/ J
  7.   <br>
    0 R! ?6 X& d7 X, {- `7 e
  8.   <span>选中值为: {{ picked }}</span>
    ' t) s9 _: v2 {  l, g
  9. </div>+ f! g) Z0 g% r' c; W

  10. 8 ?( Z1 E3 _2 @
  11. <script>
      \, O. A6 L9 @4 ]
  12. new Vue({
    % o8 s* X3 n, |5 k! ?' v2 ~
  13.   el: '#app',2 v+ T# f( U$ @$ _- P% O2 h8 t- c
  14.   data: {# w$ W  `/ t* k
  15.     picked : 'Runoob'
    $ e& E. U/ ]( {, w* e" D( B
  16.   }0 Y5 z  f, \6 L; b$ T! C
  17. })1 Q) y: [0 ~4 p# q+ g
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
0 X; ?) `" n. p
  1. <div id="app">2 B% d/ M/ U  L2 ?
  2.   <select v-model="selected" name="fruit">; N! Q" v, _( b9 U  q
  3.     <option value="">选择一个网站</option>7 {$ [' `! t' [- L
  4.     <option value="www.runoob.com">Runoob</option>
    1 s/ P( d. i* G8 y
  5.     <option value="www.google.com">Google</option>
    # ?3 I! t9 U( Q2 g% Z
  6.   </select>1 R0 k3 j1 W& W0 [, d$ R2 y/ d. o

  7. ) U( T5 D" o6 i: G
  8.   <div id="output">  s% [! k8 y5 @2 n5 I3 B
  9.       选择的网站是: {{selected}}# Q1 N2 G, P1 w$ s/ \0 M! _3 z
  10.   </div>, P7 Z& q- h+ A3 |
  11. </div>
    7 n- z, ^" X, _7 D
  12. ) `- Q& U! I  ~3 q% K) ~. I
  13. <script>% f& X; {- J" K" `% n
  14. new Vue({- ]" v% @: M; |- }5 A7 L
  15.   el: '#app',9 J- Q0 D0 Y0 @' A: |. c6 p
  16.   data: {. J* B# a" v% M5 Z# y8 s
  17.     selected: ''
    % T+ k  d1 n( s9 d/ j
  18.   }' X; m! e* j' T
  19. })
    4 r! i4 H: p* m& L$ l
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->5 M+ ~( T. B/ _' \# R
  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({
      t; C. z, n4 \0 V
  2.     el: '#app',
    0 p& R+ z/ ~7 |
  3.     data: {
    : H6 l6 i% F/ ]7 ?* r! p& Y# \
  4.         checked: false,
    $ N9 M) y7 T5 z6 C/ M
  5.         checkedNames: [],! T# o( w0 c+ c
  6.         checkedArr: ["Runoob", "Taobao", "Google"]5 l! e- O' l& k
  7.     },' f3 U9 ?# A5 N, g
  8.     methods: {
    ' x: b1 Y: ?8 z# o5 B6 z/ n
  9.         changeAllChecked: function() {3 u+ a* e& J# S/ v6 E
  10.             if (this.checked) {0 S6 z+ D6 k4 m$ ~
  11.                 this.checkedNames = this.checkedArr
    0 H1 |! D8 W5 K- ]; R
  12.             } else {9 f- D- z* P# T7 [% w4 K( ^
  13.                 this.checkedNames = []8 b- c4 A! T2 v$ i
  14.             }
    % j- |7 p9 y- o$ X  D" p$ i
  15.         }
    & ]% R8 a  g" V" `
  16.     },
    : P+ v( ^% Z) T" w! d( d+ r( `
  17.     watch: {
    2 w4 t, a" }, `+ b
  18.         "checkedNames": function() {$ |2 ]; Z1 o& N, t: C: H1 H
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    : k! d4 ~3 I& k
  20.                 this.checked = true6 r$ T. l: R% t6 I
  21.             } else {
    9 y3 G# Q) g# D7 @  }4 [- ]# V' R
  22.                 this.checked = false
    & r) v3 C. y$ m9 q$ l
  23.             }
    / N1 i" l; f: V
  24.         }( j4 x2 k% B4 v& V
  25.     }
    3 I4 ^- g- {& D' N* G* X; l& W
  26. })
复制代码

3 i2 ]& Q% w' T; w! X
( i0 Z! [; _; Q" `) W) ^+ C. R7 |$ _* f; v# t) S

0 ?5 l- d- G& v* `# e8 {% j7 p9 h- Y, J1 g
0 Y/ Y9 y, z1 n3 X9 R+ v3 Y/ g( O; G

" r; h! C+ q5 K( D9 E- n3 V' d1 l2 m* J% W9 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-14 16:47 , Processed in 0.124927 second(s), 24 queries .

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