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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
1 X, E, N% y3 Z9 k
  1. <div id="app">
    9 l7 v, z: C; O. P1 j* ?3 U, ^$ H
  2.   <p>input 元素:</p>, r8 \+ R/ y" M+ N/ _1 Z$ g
  3.   <input v-model="message" placeholder="编辑我……">
    ' I' Z# @! Y4 z: J1 T
  4.   <p>消息是: {{ message }}</p>
    , n0 i5 g. n" s7 A
  5.     ( ^8 h$ N0 N2 V$ h
  6.   <p>textarea 元素:</p>
    / i2 [2 @( o8 M, w. c7 k' B( S& |
  7.   <p style="white-space: pre">{{ message2 }}</p>  [2 Q$ k& {# s+ E9 S( x+ q. d
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    , a1 Y' O7 N$ m3 P
  9. </div>4 `4 D: Y; B; W& a2 W
  10. 9 F) C# x& ?1 }  H- k
  11. <script>
    4 L/ `8 U% Y, k1 ^; f& O
  12. new Vue({
    5 w* m% K: a, x/ Y
  13.   el: '#app',
    2 i7 C& m$ P) z6 ?( o
  14.   data: {
    7 D" j) }* {' N4 Q/ Y4 K
  15.     message: 'Runoob',/ h6 Z. V7 Y* Z5 o- H
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'; x0 n$ L3 l# M
  17.   }$ Z( H) ]; O) j! c4 R
  18. })2 h) L2 }8 R. ]1 h6 i8 T& w
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
) R6 D3 m2 I8 ~% W1 |6 K
  1. <div id="app">5 n# G4 H2 x, d8 [& A& S' E
  2.   <p>单个复选框:</p>, c' q9 `8 q3 e. M( z% V5 p
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    5 H8 I! X: q0 ^0 g4 ?
  4.   <label for="checkbox">{{ checked }}</label>
    - l, }8 ^$ {$ i! O8 i" _
  5.    
    ) s8 [* W! X  U# o
  6.   <p>多个复选框:</p>) N: u: _) D/ o9 e( Z- g
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    # W' _2 o0 o# e& n% u" l
  8.   <label for="runoob">Runoob</label>
      ?: X3 W' N" y
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">4 v8 O, _# y5 o  b; d2 b
  10.   <label for="google">Google</label>) H7 {$ l( u# h+ R& @
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    & a$ p1 E% z5 X; [( f% V9 Z) I
  12.   <label for="taobao">taobao</label>9 h4 D2 o* q/ u  }% D
  13.   <br>
    6 U2 s# z- D6 b
  14.   <span>选择的值为: {{ checkedNames }}</span>
    % l2 ~8 s2 l# f6 {+ o2 J0 B
  15. </div>
    7 `* T7 t8 {1 x& B( M' W4 c2 v

  16. - H- P6 Y2 s7 Y$ U
  17. <script>; s) k7 k% M  L0 m3 C1 Q
  18. new Vue({9 l, P2 T7 \2 f5 _" ~7 F, A6 w
  19.   el: '#app',3 h; ]" {; j6 `/ r. h( D& d
  20.   data: {+ J! M. B! h0 J) G7 J3 d
  21.     checked : false,: `; r- Z) l, X( u3 L1 }
  22.     checkedNames: []- B  p' T* `; b+ }- B* a  u
  23.   }; d7 f' v$ G) i# K2 d5 P; M4 J
  24. }). }4 E3 V9 B, i; g0 x, E8 ]& |
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮' Q5 ?4 m$ U( }  M7 O6 v4 L
  1. <div id="app">
    6 q+ A' U0 ?6 D; o0 x
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    . N* U! Z. e8 Q! ~5 Q
  3.   <label for="runoob">Runoob</label>0 O) X" E7 W/ v1 `/ _' r, q- Y# F
  4.   <br>& ~  g0 z3 S$ [! }. `* @) z: c
  5.   <input type="radio" id="google" value="Google" v-model="picked">0 m! \4 D# r2 s* @0 ]: Q
  6.   <label for="google">Google</label>
      |  X) B7 h. Y/ n
  7.   <br>
      w; T0 F8 o6 a( d, @
  8.   <span>选中值为: {{ picked }}</span>7 b* m( H) o& r1 H* F
  9. </div>* X7 @5 L8 Q! J- S  ~
  10. 6 I2 W4 j) \0 ^2 w0 {* u
  11. <script>
    ) U/ h- K  z# b0 a5 S6 W) X! k4 I
  12. new Vue({
    9 k# }+ a5 o  Y, @+ o
  13.   el: '#app',) L8 B& F9 i; o4 a  c8 n& l
  14.   data: {! h4 W% }% M& t5 `! H  j. k$ n, z
  15.     picked : 'Runoob': w) V( J6 W* k2 u/ u: d5 Z' u
  16.   }2 w0 _9 n4 U/ p' X* Y
  17. })
    : q$ m' f$ h. f* A/ N1 K) F7 `& M
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
  p) j& X# X9 k
  1. <div id="app">9 c4 g, b- t: B9 C# k/ I# m
  2.   <select v-model="selected" name="fruit">6 t" y8 Q2 G1 j1 {9 v( F
  3.     <option value="">选择一个网站</option>
    4 I- g; R$ Q- _. m
  4.     <option value="www.runoob.com">Runoob</option>
    7 N; |3 Z8 ]' `* G
  5.     <option value="www.google.com">Google</option>5 H1 w4 `# o* `6 `5 E
  6.   </select>
    6 o  p$ \* c+ `8 a3 ]0 f! H

  7. * F- F8 U! L! }1 o2 j
  8.   <div id="output">: \" \; G4 F# C0 q! k
  9.       选择的网站是: {{selected}}
    ) U% b6 O8 C$ K- j- ~6 E, ~1 F
  10.   </div>9 C( }. @6 C! j& W5 }$ H
  11. </div>6 i- c6 j0 l/ U4 r, o# c3 e
  12. ' G) m, D5 B' T5 T+ H8 V. F
  13. <script>
    0 C2 M/ f& ^0 J9 f
  14. new Vue({- i/ Q# ]" d8 s  C' J: c
  15.   el: '#app',) J- {, g' X% g) a
  16.   data: {  K, P1 N, e9 k) f! L
  17.     selected: ''
    6 M4 A- E7 ~  r: B! q; f1 Q5 t/ z6 A
  18.   }$ p3 l( l3 j; F9 t8 ?9 f
  19. })4 `! L1 ~; }* w6 g1 |) i9 J8 `* I
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->) m1 X# P: L+ n+ P* L9 @/ }, K
  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({
    5 U8 A1 s* U9 Y9 I1 k" i6 r  N  P
  2.     el: '#app',  j  M! v  `( n+ s4 I- z
  3.     data: {
    7 s: I0 B! ~9 Z: N3 Z
  4.         checked: false,
    . B  i6 i5 y' f; A5 z
  5.         checkedNames: [],
    $ N# w% U8 v: r! w% L7 A6 C* T
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    + ^* h7 O9 s/ ?# h: O  q
  7.     },
    ' b5 N  Q$ r+ e. o9 U* |
  8.     methods: {" ]: z- H- @: U  b1 p- X
  9.         changeAllChecked: function() {
    / m: `$ p% r( N/ k- K8 z( c' x
  10.             if (this.checked) {1 d0 V/ ~' [5 ]/ T- p2 ~/ M. b: E. ]+ x
  11.                 this.checkedNames = this.checkedArr
    * |" Z: o' G/ ]) I" f/ f
  12.             } else {' E' w8 _) E- `; Y6 ~' e0 I
  13.                 this.checkedNames = []
    0 I1 Q" D# s7 }
  14.             }) F) d- x9 Z# J1 I
  15.         }
    3 i! H6 d. x2 z1 K( v* c
  16.     },9 I- \3 {# [. k; \2 L* x' S9 m; `
  17.     watch: {
    9 B6 A% |; p/ d; T
  18.         "checkedNames": function() {
    % S4 `; L2 f4 F
  19.             if (this.checkedNames.length == this.checkedArr.length) {9 ~0 U" B7 w1 `
  20.                 this.checked = true" d6 c' z; t" R# O, I8 Q; ?1 I9 B
  21.             } else {$ A' R) \1 L" r* C2 u" V
  22.                 this.checked = false& L! t, u+ [7 g" N& G1 j" h2 Q
  23.             }' O5 a% _) G* X8 W& e: B/ f9 V
  24.         }8 y0 b+ ]% V, T% a" z
  25.     }
    4 z' S7 q7 X# }8 W% h4 p
  26. })
复制代码

3 u" R/ G2 U) i* f
6 b  T* T! L2 q' F+ b. H2 l) Y# r4 S' u# x

1 Q! w- q, T9 k! f& o9 `" ?) N2 G, i/ i
  q2 R- Z. I; s/ `; N( M1 U

1 W5 q% E! [0 f1 r, J1 j2 u/ M: ]7 |4 V/ n5 y7 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:19 , Processed in 0.066250 second(s), 23 queries .

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