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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

6 H! K# |, K' u7 E
  1. <div id="app">7 L- I$ x/ s+ D; J2 {2 {
  2.   <p>input 元素:</p>
    3 Y' Z7 U, M# |8 s$ Z
  3.   <input v-model="message" placeholder="编辑我……">. Y/ i( x+ Q" J8 o+ ]
  4.   <p>消息是: {{ message }}</p>3 w9 {( }" u3 o  J
  5.    
    - T) S+ d+ a( ~  `' |' L* [
  6.   <p>textarea 元素:</p>2 S8 v0 g8 ?5 C# g
  7.   <p style="white-space: pre">{{ message2 }}</p>
    : F- B: T8 l* |$ U4 Q
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    ( G$ N/ ?" P; f" F
  9. </div>' Z& J; ?% z- c

  10. ! u! }2 w, W" \+ R! ~
  11. <script>
    ' H* i# h6 A6 n/ u
  12. new Vue({1 r6 q  S* |6 W7 w1 R5 Y
  13.   el: '#app'," a! g2 M8 B% G& I
  14.   data: {* H3 a; f3 j8 l$ N$ `" x' p
  15.     message: 'Runoob',# i: j0 f! v. ?$ I  i' k
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com', A2 n% b: G% ?" @
  17.   }, z( _& f4 s( q9 Z% X
  18. })
    / z/ g. |) e& m  b' u- U7 I+ l
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
1 B2 b" a% N0 p; Z2 o! Q  V
  1. <div id="app">
    * z* ~( l5 N) A) e, K
  2.   <p>单个复选框:</p>
    0 v/ e" t4 t6 O  P0 @3 P+ `. O
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    3 n; F0 n) L8 M8 J1 i- |  L7 D9 [) z
  4.   <label for="checkbox">{{ checked }}</label>) i) r% ?# C! m5 o1 U) r7 S
  5.    
    / L+ [0 x$ b+ d8 H% L1 _2 r
  6.   <p>多个复选框:</p>
    ! k7 X0 O$ P6 W2 e
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    : x- X: h$ Z" `, n
  8.   <label for="runoob">Runoob</label>
    7 S/ j. M' h" @
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    : T$ Y# N/ s- q
  10.   <label for="google">Google</label>! i: y; v$ E, ?/ j, Y. n
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    - ?( W. i, b: W5 f) O  K; }  u
  12.   <label for="taobao">taobao</label>
    2 e( f- W; g0 P# s. [
  13.   <br>
    5 d  w( [5 s3 j. Z: f8 j
  14.   <span>选择的值为: {{ checkedNames }}</span>+ O" z. c' Y- `6 k
  15. </div># I  c# m" T' M# ]" c
  16. 3 v" ?+ |2 j* C6 P8 {  w1 A
  17. <script>
    - ~5 Q5 i: \: u% N. A/ K
  18. new Vue({2 O& r+ a( [( d" G/ z' ?0 O
  19.   el: '#app',+ ^! |2 ^' _( t1 _
  20.   data: {" s  S2 Y2 \7 t! r8 M! `, Z
  21.     checked : false,* v$ p6 W3 U0 s' S( k% b
  22.     checkedNames: []3 q  s1 k' s, w1 s2 Z
  23.   }2 o) N/ {7 s) `7 I
  24. })$ Q- r2 H  S7 I3 `* J
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮0 r. s' c- K7 H" @6 N  r$ o
  1. <div id="app">
    0 B4 v5 u! I: W" n: b2 p3 ^% Z5 ~% I
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">) J4 Y# J# L) K; \
  3.   <label for="runoob">Runoob</label>5 G  z5 i  V6 A5 T; ~) J7 \
  4.   <br>
    / L  t, ]3 I( P  P
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    : p& H" n% ~* ]7 b% d) J7 n  O! J
  6.   <label for="google">Google</label>
      k% I) E" l, K8 g# s
  7.   <br>
    2 C, Z1 v1 l1 o" w7 k
  8.   <span>选中值为: {{ picked }}</span>" }; h( i0 F& P  G- L
  9. </div>
    1 A, k/ R  j; ]  Q& }
  10. 3 r+ j  K( i' Z0 n0 Z) y, K
  11. <script>' z" m8 k; B7 y, v% r7 H
  12. new Vue({, Q# I4 @  b" B+ _* U7 p; s
  13.   el: '#app',3 l8 _  x# }5 l. @; w3 s5 U7 v
  14.   data: {+ n0 T! v0 P" Z2 B- I0 a+ R
  15.     picked : 'Runoob'6 ]2 |! Z* c+ A2 A- C' r
  16.   }
    9 w5 Y& S% q" M. J% m( e3 C
  17. })
    " ]* T) s- ?/ }2 W: B; Q
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select3 z5 Z9 h2 L- O4 F0 x# r
  1. <div id="app">
    # f+ Y7 T( W$ x. B* y- b6 L
  2.   <select v-model="selected" name="fruit">
    5 U5 N( D3 x2 Q1 K; s6 @: D
  3.     <option value="">选择一个网站</option>
    $ z; g5 e6 U' n  E) b
  4.     <option value="www.runoob.com">Runoob</option>
    6 h& S/ ?+ ?1 g( s6 a
  5.     <option value="www.google.com">Google</option>
    . A2 J3 \2 r# X7 ~9 N9 c
  6.   </select>2 R/ ~* p( I# Q
  7.   I1 C( @( a) q0 l: g, I4 m3 l
  8.   <div id="output">% }7 ~7 t" y' K* o* o. \
  9.       选择的网站是: {{selected}}# u' F0 @4 p' [# y; S, q( E
  10.   </div>
    ; w( S9 V" ?7 X1 `
  11. </div>, `( \5 y( R8 R. s7 h* w* k

  12. 8 U; k; ~- R" c0 Y3 f: j+ z" ]
  13. <script>3 T. ^7 ?- b  f/ v* _0 ^
  14. new Vue({9 G3 b5 \: J5 E5 n
  15.   el: '#app',
    0 M- A/ i5 ?# X- G; ?3 e3 X0 n
  16.   data: {7 l" }2 [" O  {: `+ s: m) s, D6 `$ _
  17.     selected: '' ' f0 D" j5 S6 Q& O+ Y$ l
  18.   }
    ; _8 N( n' y7 D* }: U1 ~
  19. })* [5 |0 X7 u2 _4 w& o; w, |
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->: ], {8 {* m. j4 y  u' f
  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({
    ! O3 D0 E: j- _4 ~
  2.     el: '#app',
    - z0 u: y# Q% K+ m' W. T
  3.     data: {$ |" l8 C/ r9 K& A% ~6 F% h
  4.         checked: false,
    7 ?0 v- A0 h& }8 |3 i& M
  5.         checkedNames: [],
    ! j3 |# w: L" _! w; e8 u: S
  6.         checkedArr: ["Runoob", "Taobao", "Google"]% D2 u. c/ R! @" p6 c. ?
  7.     },
    - i9 ~+ g. L8 a) _; A! t
  8.     methods: {3 t8 e) O1 W4 x3 D" K8 U5 _6 \( @% G
  9.         changeAllChecked: function() {
    - ]8 d' y' W; m
  10.             if (this.checked) {( G/ E; m- `. C. }$ `
  11.                 this.checkedNames = this.checkedArr( X! \) b' y2 i
  12.             } else {0 F5 v. l0 d6 w2 \; r- a
  13.                 this.checkedNames = [], A8 A/ r- T7 u1 y2 a$ \
  14.             }2 w" g3 f% K9 `# }
  15.         }/ G( G/ M9 M( j! @5 n
  16.     },
    ' {# R* |% }9 X, C7 u) F; T
  17.     watch: {
    * r" K2 C: A% O" p/ [9 n4 m
  18.         "checkedNames": function() {
    * k5 R" D! g3 n) i" y; U
  19.             if (this.checkedNames.length == this.checkedArr.length) {. Q6 o3 X* c* c6 z( C. t6 v7 P
  20.                 this.checked = true
    + d, ~1 i3 f1 W4 ~' h1 \7 N! s/ q1 I3 R
  21.             } else {
    2 R" b" e) G/ Q4 C' l  U# Q# g! z
  22.                 this.checked = false7 Y; {' t1 @0 `7 {9 Q( B+ a: w
  23.             }
    5 W7 j' e! j" \/ e
  24.         }3 @$ U2 M8 t7 y2 |. F
  25.     }+ u/ E+ C/ V0 o
  26. })
复制代码
, c. r) E8 n8 Z% Q$ N. k4 |9 x, v

& ?- J: }! |- f" h/ v  W2 G
' N4 {+ A6 W; O+ ~5 _8 U8 T2 R2 b1 {6 O. Z. O7 ?& i7 V

/ H0 a* g1 @. ?/ ]' H( X' p* E! A9 G! @) U! K9 T) e

+ j! ~9 E' T3 o# q! F
$ C; M/ v$ s+ o. ^) v5 Y: t8 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 21:35 , Processed in 0.134192 second(s), 22 queries .

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