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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

6 C+ h! K# |$ G, T
  1. <div id="app">
    3 {& Z2 g, m2 M5 w2 v! L/ n! p( o# T
  2.   <p>input 元素:</p>
    4 L& X1 ?. [1 b" o) r! e: }
  3.   <input v-model="message" placeholder="编辑我……">
    : D, K, U. u5 C' [9 h
  4.   <p>消息是: {{ message }}</p>
    . u/ @  g2 [2 a% D# u& ?; E1 N
  5.     / u; T. `1 z, {. c% @
  6.   <p>textarea 元素:</p>/ ?2 O8 J9 `8 f( m7 M; O/ E
  7.   <p style="white-space: pre">{{ message2 }}</p>
    3 G2 v% J0 D# p- O
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    & a7 C8 |0 D+ d
  9. </div>
    ( Y- s" z" Q4 m1 a% e- U, ~1 `( R6 Z9 r
  10. 2 S1 @/ f6 A+ j
  11. <script>* A: K  \$ g9 [% y+ G( F
  12. new Vue({
    3 D* a/ @; U: Z! G% r6 v
  13.   el: '#app',$ z1 ^' s- @+ q5 Z- r) C
  14.   data: {- R: z  O! k4 S* o9 Z4 |
  15.     message: 'Runoob',
    + F1 [, k6 ~6 I2 J8 q: Q0 P
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'! J, v6 q" M! m: r9 p1 G) v0 O" U
  17.   }
    1 R" a+ x! l# X  d1 x
  18. })# ~* S* C, D4 ^$ o% X# S; S
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
4 k: J- h4 N3 H* E2 S
  1. <div id="app">4 J& \3 s( p1 q: I
  2.   <p>单个复选框:</p>
    9 u( \( u6 Q1 |/ m+ y
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    . g4 T- L: f; i9 ?3 Q
  4.   <label for="checkbox">{{ checked }}</label>
    ; K9 g$ R. p) K# v
  5.     8 c6 Y' Y' S. ^! l! J! U  t" c' A$ j
  6.   <p>多个复选框:</p>0 E  b% `+ S7 B5 |; L
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">4 h$ ]1 Y8 I. v
  8.   <label for="runoob">Runoob</label>- }2 n. j; ~- e) y1 C! C0 }
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">1 q4 E& H  a( [
  10.   <label for="google">Google</label>
    $ Q' Y$ F+ N+ ?7 U, o$ W+ _
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">5 O7 r7 P7 f# f' V4 g( Q. p& f
  12.   <label for="taobao">taobao</label>6 j) {7 a: H  q5 }
  13.   <br>- r9 g4 X) A- ]7 N, N9 G
  14.   <span>选择的值为: {{ checkedNames }}</span>
    4 H( c+ P$ w* B* x6 p4 U' H
  15. </div>
    $ z. y2 k& e" F* e

  16. % V$ x3 ?; q& H
  17. <script>) Z: i+ f: N0 t# n
  18. new Vue({7 }- c; m$ _6 L2 J
  19.   el: '#app',  p( s- F2 u& D
  20.   data: {
    & O9 y6 |- d, l
  21.     checked : false,
      [% v/ ~3 x' R" O0 \
  22.     checkedNames: []
    1 o$ _1 J  ~3 p& i% d9 O8 ?
  23.   }' i$ M: a: \5 L) u0 X) ~
  24. })
      O" L2 w5 r, a4 s% f
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
- U; M% P9 a# d/ a$ s: b; _
  1. <div id="app">6 ?( X" v, k* ~' U2 |% O' p
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">! B8 u5 J9 ?% d  f1 Z
  3.   <label for="runoob">Runoob</label>5 b6 R6 h- }. ]8 l4 ~; q8 M# _
  4.   <br>
    * J7 j* a' X; z+ D2 {! h3 w. A
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    ; ^) h; ]$ l4 y& P( b9 ]5 a9 C$ H; H5 G
  6.   <label for="google">Google</label>, I6 |4 R5 p2 ^) }/ \7 i' K, v6 M. f
  7.   <br>
    4 J* H4 b  \* s
  8.   <span>选中值为: {{ picked }}</span>: E9 |6 V, p% G2 o! R/ G
  9. </div>3 O! ?* F. ^1 l, |- e+ {" S

  10. 9 }3 ?5 S6 l0 I
  11. <script>
    ! }6 l: l2 G6 n- {: a5 z
  12. new Vue({
    + y. k  O7 O' O" {5 Q' I; F2 e8 @' y
  13.   el: '#app',# F. i8 H! H1 t, [( c: f- B
  14.   data: {
    - g1 W0 }- q/ f/ c+ f4 R; C" P# H
  15.     picked : 'Runoob'
    ( N- T6 J$ R' \0 A4 K
  16.   }
    " I5 o9 B4 `) G
  17. }), |$ ?6 R* [$ w) j5 z4 Y" X
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select* q- y! G% t( b5 s' L
  1. <div id="app">5 m8 W. ]# B4 w& z: Z( M
  2.   <select v-model="selected" name="fruit">& a+ I) z+ S: V- ~3 U+ N
  3.     <option value="">选择一个网站</option>  o' ^8 A3 }, O+ U: @0 C
  4.     <option value="www.runoob.com">Runoob</option>
    - x  I" T7 H* [8 _+ {3 E& o& M
  5.     <option value="www.google.com">Google</option>
    / Q$ |  E- H7 {- ?
  6.   </select>5 b, E1 W7 g5 R
  7. " t2 |  w, w5 Y2 B
  8.   <div id="output">8 `, f# h7 R" Y' y
  9.       选择的网站是: {{selected}}
    6 h8 g! ?# G* ]3 S
  10.   </div>
    0 g0 o! h2 F2 I1 r' i3 R: l) ]
  11. </div>6 N# u) S  J$ x4 u) C2 J; X9 y; n
  12. / z4 J$ Y. e" \  V# h4 O) k
  13. <script>
    * V0 V- ?3 w1 k: l
  14. new Vue({
    " P3 B+ \* Y! H/ H2 z1 X% _  Z
  15.   el: '#app',0 F/ W' Y3 }5 [! S" F1 V& B; p
  16.   data: {2 G9 f0 d8 N0 f1 K: T" v0 x$ l
  17.     selected: '' ; ~0 _# l. ~2 a3 H, E' o  F
  18.   }# _$ |4 {" P# w+ Z$ T
  19. })% g) v8 I0 n) `; w0 i
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    1 M- m, V5 T# W0 ^+ 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({1 @9 e0 U) \9 _/ Y6 W( T
  2.     el: '#app',; A# p! Y2 g6 N% @6 q/ F
  3.     data: {
    3 \5 O5 x" @5 \6 r
  4.         checked: false,
    . r2 s0 Z8 d1 W5 H9 x
  5.         checkedNames: [],8 N. M4 G" k+ l$ T' T
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    % a- v* ?# F) K% X1 a
  7.     },, a9 Z8 j4 ?9 G' y2 l0 g
  8.     methods: {( @; F% Y: p0 ^# C7 Q
  9.         changeAllChecked: function() {
    4 X5 X; h4 b' O- C/ `( I8 i& W8 l
  10.             if (this.checked) {7 p2 |8 v/ W) z% D* }9 ^  L
  11.                 this.checkedNames = this.checkedArr& i4 M# }; ]: n1 S' m! I% {
  12.             } else {* s6 q  }; T' F0 q
  13.                 this.checkedNames = [], \: \. ?6 [8 I' E. M  V" }
  14.             }. ~' P% J! [- D: }% \
  15.         }
    3 U) H" F  G0 t* @) L
  16.     },
    8 B# F; C0 r" ~( m* H7 h
  17.     watch: {
    & t! t: i. D9 n( O0 V. g4 S6 E8 Q
  18.         "checkedNames": function() {
    0 x6 W! a8 d/ w  M" i  i
  19.             if (this.checkedNames.length == this.checkedArr.length) {" u# C9 K2 J* s6 u0 Z
  20.                 this.checked = true
      f- T6 E" d2 i
  21.             } else {, s  j% i, K) f9 ^
  22.                 this.checked = false
    ; J! i+ U3 [% H6 [
  23.             }7 ^0 w3 f, c! t. T  _! K
  24.         }% c: |8 ^% O( Y4 w7 G0 z+ J( P7 S) s
  25.     }
    7 V& a6 d0 k6 t% v0 q
  26. })
复制代码

  o& A' t7 r0 s
% F9 h! s4 C7 d$ i: U( z) l( C- A( m5 d6 z( [0 g7 {: @
! C- i& b+ Q/ p

8 [  j/ w( J& ?( k' d
' G% ], ~8 F6 x- {
  x. C; ]2 q, s  {' D
: o9 N  \" D: V( |: R' b- [: x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:32 , Processed in 0.124231 second(s), 25 queries .

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