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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
/ R5 w. B! h# A! t  h  \4 q
  1. <div id="app">
    ! T, `9 b- f2 F6 w4 V
  2.   <p>input 元素:</p>
    4 z* l, m. A9 e( y
  3.   <input v-model="message" placeholder="编辑我……">
    1 k; W" x( r( F3 q8 x6 t9 M) w
  4.   <p>消息是: {{ message }}</p>
    & r- A  j: S1 ?/ G
  5.     : P& Q! t; {; P# K9 |1 Q: d; A9 \% L
  6.   <p>textarea 元素:</p>8 A! M, p. w- C
  7.   <p style="white-space: pre">{{ message2 }}</p>
    1 ?" q3 q  O8 b9 a
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>/ C) }6 M* r* d+ _4 X, t1 a
  9. </div>- }) @; i( B; [+ t! l

  10. ! ^6 U$ x1 a* l' m$ T
  11. <script>
    + m, _! C7 O5 o8 P# i- f! d
  12. new Vue({! Z& X1 ~( k5 J5 |
  13.   el: '#app',
    7 z, v" a/ O. \' q1 f$ I: ?: U. v
  14.   data: {
    1 r3 s& l. F: p& a8 ?, e
  15.     message: 'Runoob',6 f( X# Q% F3 b3 X1 J1 g
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    . y. w& d3 l; ^3 k: E1 Y  J
  17.   }
    * O0 t# [% V9 c$ Y3 D8 q* v5 a
  18. })6 X/ v& o0 q1 N
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

4 L  b4 v% U, C' T. c
  1. <div id="app"># p' [- _1 U; _# D2 x
  2.   <p>单个复选框:</p>
    - {/ R# v) v* E. |" D- `# T  o
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    . W* {0 w: n" k2 N. m
  4.   <label for="checkbox">{{ checked }}</label>
    8 v5 B9 U( r1 P1 g% L# f
  5.     ; d( ~# z' K7 |% f( U) h) Z3 b
  6.   <p>多个复选框:</p>
    ; u1 e* c6 O5 R
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">, g; p: Y$ |9 v8 g8 N6 G+ C9 g
  8.   <label for="runoob">Runoob</label>9 z. o& K; S" L
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">; ~6 B* R, q* V0 a1 p! ~
  10.   <label for="google">Google</label>- o0 d- N2 [; x' V0 v. M6 b
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    # A+ n# Z4 k) v. O# b- x4 }
  12.   <label for="taobao">taobao</label>" j5 ~' \+ u* w! L* R6 C
  13.   <br>
    4 L3 `7 W1 F, M+ O$ H7 j
  14.   <span>选择的值为: {{ checkedNames }}</span>
    . u$ T' E# |- y) d$ G+ W# ?9 s9 I
  15. </div>
    3 T, s- m6 {9 ?/ I
  16. , x; e  E" k" t  F! l" N& A- f
  17. <script>
    6 b; W2 ?; }* m7 ]) ]8 ^
  18. new Vue({
    / u4 o3 ~, q' ~0 V2 b: t8 K/ }  K! P0 P
  19.   el: '#app',
    - b2 @) I& @6 |/ _1 L
  20.   data: {/ X8 C; r! x* Y9 z8 J! V
  21.     checked : false,
    # _1 `0 B& }! U* [4 C( D" d
  22.     checkedNames: []* Q7 o/ @1 S% g7 F4 `# k
  23.   }: `3 m3 p! ^- j7 j$ O
  24. })
    7 R9 l8 _4 M, h9 O2 ^
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
  m( V8 h$ p: V2 c
  1. <div id="app">
    & @9 M$ k+ A- a
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">' T8 X5 @# B) @/ {1 p+ {8 E
  3.   <label for="runoob">Runoob</label>2 u/ p* v" z! i3 U2 S
  4.   <br>
    6 S8 Q, ~4 Z& o% o+ B
  5.   <input type="radio" id="google" value="Google" v-model="picked">7 ~; u2 M0 p( q1 ^* I
  6.   <label for="google">Google</label>
    ; k7 V& G9 ], ^: ]
  7.   <br>
    $ P$ H' ^( x* ]. R6 i4 `" \
  8.   <span>选中值为: {{ picked }}</span>! h# M5 m$ M( u% q
  9. </div>4 b/ A  H) m  P) }; z) f' V$ l1 ~# t
  10. ; h% B& ~3 d3 m' }
  11. <script>  t4 E5 Q! q  x( G3 l
  12. new Vue({
    - z% k3 t8 s$ |
  13.   el: '#app',
    * {* b% D' W4 C% v
  14.   data: {
    1 ?3 T3 C1 E% U9 Q
  15.     picked : 'Runoob'% S" P$ j+ o  A/ s' B
  16.   }4 o6 L6 u$ F1 G! q% W; D- X- m  I, h
  17. })0 p/ ^/ e, K) Z
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select9 u# b* K1 p0 u& |! e) V- R
  1. <div id="app">0 L) a: a" L' b- B* u
  2.   <select v-model="selected" name="fruit">! w5 {% o0 l3 \) [" r8 H
  3.     <option value="">选择一个网站</option>
    . ~) q6 k( U9 b: Z3 c
  4.     <option value="www.runoob.com">Runoob</option>
    . s; P1 D) Y. l! G/ T9 q
  5.     <option value="www.google.com">Google</option>
    0 X4 s% S+ `  L6 o9 Q
  6.   </select>" ]" V2 {% ]7 r

  7. + L& b& o! C4 {1 q) R! ^/ V
  8.   <div id="output">; r7 d* \- S8 K# S+ C! M( c
  9.       选择的网站是: {{selected}}
    : o9 k  u" p$ E5 M/ m
  10.   </div>1 h* P9 C% m' V9 k6 s
  11. </div>
    ' x7 F8 r& @# f" E: k$ M

  12. : H% \7 b0 _8 D" Z$ j/ Q8 E
  13. <script>
    - a4 ^4 n5 \* `7 C0 b5 x
  14. new Vue({7 w1 T6 c) Z! @+ S& r# m8 V. r
  15.   el: '#app',
    ' _0 a1 v/ ?2 y" j  r
  16.   data: {1 R- E* J0 w6 M3 k; h4 f
  17.     selected: ''
    + T7 a4 f! v+ x' L
  18.   }
    6 y0 m6 @, n! h
  19. })
    # D: S8 J! u9 j# |
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    9 u3 L5 \2 ^* W; Y' n$ c( Y
  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 b. B, _! g0 ^3 s7 q5 ~
  2.     el: '#app',# W9 ~1 h4 L. h* e0 G7 g" {
  3.     data: {
    1 u8 r6 v' [9 t% Z% p5 x
  4.         checked: false,
    % e; V3 r/ x) l" J, a( |4 w5 e  ^
  5.         checkedNames: [],
    3 W& S2 [7 _6 ~# P1 z
  6.         checkedArr: ["Runoob", "Taobao", "Google"]/ Q/ H' y  K7 |
  7.     },
    9 j) }1 L" O0 n4 {
  8.     methods: {
    - s" v' e/ Y% _0 |, j, u* \! ^2 X
  9.         changeAllChecked: function() {
      C: H" Z0 x7 H8 ]: e
  10.             if (this.checked) {
    . r& D, z& t1 L! S5 I
  11.                 this.checkedNames = this.checkedArr& `. F7 V7 u. n9 w2 [; [
  12.             } else {; o* a8 [& \7 J
  13.                 this.checkedNames = []
    ) y9 f6 ~' F1 i: K% }7 j$ g& A2 J
  14.             }6 _+ n# Y/ t1 S
  15.         }6 d& q$ N) a$ x& n  T; o$ X
  16.     },) ^; }2 F; o  }, R0 `
  17.     watch: {8 v1 T% v% j! Z5 M( c$ C7 Y
  18.         "checkedNames": function() {& N! {! e3 E  G0 C. q( A$ u2 r/ l
  19.             if (this.checkedNames.length == this.checkedArr.length) {7 \3 X6 r" v5 J( J: t$ @$ O8 P
  20.                 this.checked = true
    1 x$ ^% {7 }, u
  21.             } else {8 i! n$ N0 @) I) ~8 i
  22.                 this.checked = false+ l; @, d' ?/ S" c( s
  23.             }
    $ F; B8 ?9 P/ {3 ]
  24.         }+ [. d- H+ S. j) {
  25.     }
    ) g2 |& L( e- a0 X
  26. })
复制代码

% L. Z7 D( Q: B& z! g- G0 f6 |4 h! s* w/ e! n/ U* ]4 Z

5 d1 X! j; J7 v% Z
2 d$ {  u9 T" y4 o/ j- H' }5 W: ?
7 V: k) {% t- P- n) l& B! P2 ]3 j- z1 k+ _5 z0 W$ i4 g' R4 {- a
( ~; r% G. z0 ]% h" g2 O
, ?+ R1 B. D$ v  ~& ?! |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-4-29 05:09 , Processed in 0.134951 second(s), 24 queries .

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