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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
, k2 x6 S" a4 C3 Y
  1. <div id="app">& A. J" e9 E, R: n6 I
  2.   <p>input 元素:</p>" }% a  F/ P( D3 B& ]! K
  3.   <input v-model="message" placeholder="编辑我……">3 j- y& u( R1 o) R* g$ |' H
  4.   <p>消息是: {{ message }}</p>0 T& M0 I5 J/ p
  5.     # f# j: m4 w8 C' ~* Y/ c
  6.   <p>textarea 元素:</p>- t, X0 d2 U4 X0 R; H& [7 n
  7.   <p style="white-space: pre">{{ message2 }}</p>
    ' a0 l' \$ C' q5 |- g
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    8 t! f. i9 w+ D  l
  9. </div>6 l2 ^; _9 L7 j8 x2 Q/ Y6 s, n
  10. 0 l: a' V! m2 I& d; f* h
  11. <script>3 ~" h0 f8 f- g3 v
  12. new Vue({( A' O# r# }! Y' x/ L/ L
  13.   el: '#app',
    & s1 R/ f1 R8 S
  14.   data: {
    : w8 w  ?* S' P# j0 V5 e
  15.     message: 'Runoob',
    . i! n/ {6 I. G3 M
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'+ Y* n0 B/ ]( ]
  17.   }1 _! p! O! A) w( a9 j
  18. })
    3 ^& G9 P: U, r7 u- ~
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

# P" X0 k2 O, @7 R) ^6 b8 S  y
  1. <div id="app">
    7 W: {* K# p6 h7 e: x
  2.   <p>单个复选框:</p>0 O+ k  I' a2 Q, {9 Q0 t
  3.   <input type="checkbox" id="checkbox" v-model="checked">5 g6 |* j- K& i' _' O4 W! z/ W7 H
  4.   <label for="checkbox">{{ checked }}</label>
    + n9 z+ h. S3 c5 q- J0 y- d
  5.     & |" P, J2 q8 G6 u0 N
  6.   <p>多个复选框:</p>
      G$ h* ~/ w4 x. J7 d
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">6 O: F4 Z& x# U: G
  8.   <label for="runoob">Runoob</label>. Z% k7 k( @1 W6 m" X% l1 n9 H
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    4 N5 d  e% O, n* c8 H, W% K
  10.   <label for="google">Google</label>5 G9 w. k; V/ y' q
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">3 \0 E3 i) ^. t9 m1 k3 p9 q/ B
  12.   <label for="taobao">taobao</label>
    % q; Q" D$ U( n7 s: v9 T
  13.   <br>: _) b1 |% Z2 [( z
  14.   <span>选择的值为: {{ checkedNames }}</span>- u8 a/ ^- g! q6 l! j- [
  15. </div>1 g& R4 T6 L* Q% h

  16. 2 p# K1 Z% G# u, s; Z
  17. <script>% I2 J: Z1 S9 q8 h. Z. [; o0 Y; E
  18. new Vue({( M* P$ W- P4 X7 ~+ ]& G! ]. d
  19.   el: '#app',
    % |4 y) y  C2 \, {3 t2 h& u: d
  20.   data: {- h$ `% ~: {- H, E( z
  21.     checked : false,
    # a" R, [, L3 r
  22.     checkedNames: []
    ( j# Q  O4 _6 }9 N! k4 w8 |
  23.   }
    7 t$ c9 [9 \5 \: N# z! `4 i
  24. }), \4 z6 S$ l1 X3 e5 p4 g
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
' _* p) J. q: s% @
  1. <div id="app">- ~8 w: W2 Z, Q+ Z
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">( s; R. P) v" ?  m& L
  3.   <label for="runoob">Runoob</label>
    3 r2 q9 b* b* D6 A9 v
  4.   <br>
    ' \% j* Z; b: c/ a5 A9 v, J
  5.   <input type="radio" id="google" value="Google" v-model="picked">3 i4 t! u' z  X
  6.   <label for="google">Google</label>' P. }- P9 ^" M/ S8 S7 w
  7.   <br>
    # u) d5 u& X4 X" _4 o- H9 N0 Z
  8.   <span>选中值为: {{ picked }}</span>2 h/ p$ u/ o4 t' p- b, `
  9. </div>8 N8 ?- i3 \9 y! t9 ]
  10. ! L- O; z7 @, R
  11. <script>
    4 ~" L3 n$ ~6 Q* p/ x
  12. new Vue({  {4 c) K" F& r
  13.   el: '#app',
      c, e# d0 |- D) n5 E" D$ A
  14.   data: {' S0 r2 X2 ?6 F3 W8 f- g0 d
  15.     picked : 'Runoob'" }3 W0 F+ n) X6 k; D
  16.   }) W  c/ i. t4 W8 o% M5 v+ Q
  17. })
    , L( s0 l( @2 @' v: `$ c
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
6 I) }' {: \7 p/ z3 L+ h
  1. <div id="app">
    ) m7 E( P+ y; {8 V. `3 o' R
  2.   <select v-model="selected" name="fruit">
    + F1 w+ N( l7 ~8 w
  3.     <option value="">选择一个网站</option>8 \2 [( E6 j; _' `/ }1 g
  4.     <option value="www.runoob.com">Runoob</option>6 K# S9 `3 E/ t5 |7 b% p, y8 v6 G: V' b
  5.     <option value="www.google.com">Google</option>$ m+ r. @& R$ s6 s+ Y: O; K
  6.   </select>0 z$ @* a8 w! S$ P) O# f

  7. 7 A; ~4 l; d2 ~( Y. w& T/ A
  8.   <div id="output">: O. {, C$ V5 e3 I* C3 |& U
  9.       选择的网站是: {{selected}}" A$ j& X  X' J9 o7 N6 {! q0 A
  10.   </div>4 N! {5 b; ?0 z$ t9 D6 U
  11. </div>( @( u. ?( T5 R% h

  12. * _8 {$ w2 z$ c: W+ h# p9 h
  13. <script>% A. m( }, o; C* l2 g' `
  14. new Vue({- L9 E4 f; m% t% F/ e
  15.   el: '#app',3 Z8 _* K7 T( v  s/ m- c
  16.   data: {& K7 I% }( q) m7 t0 L: |
  17.     selected: '' + u; s% Q) s. u. M; M+ @: Q! ~' J
  18.   }: e- E; B/ {9 f4 U
  19. })/ i& p# }. y$ A- }5 ]! f
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->; ^: N. C3 m# @! ]: V6 O# L
  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({
    - Q( |4 f2 R7 r
  2.     el: '#app',
    1 S1 e" u6 x1 U( j& H3 X  X! t& [0 S
  3.     data: {: E) K: H* r! S2 Z+ n2 A
  4.         checked: false,/ Y8 x" E7 H& Z6 Q( g6 b' F7 F
  5.         checkedNames: [],& I7 k8 d3 O; h3 T
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    , P8 U/ r# w, ^* k# X
  7.     },
    2 Z8 m! s8 |+ k$ O- c7 j& s$ y; @
  8.     methods: {
    6 s3 }2 j% k  z9 X9 `2 U6 ~, v
  9.         changeAllChecked: function() {  {% d4 C, a3 n4 A" y
  10.             if (this.checked) {1 G+ `* w! A! L! t
  11.                 this.checkedNames = this.checkedArr$ E5 l2 e7 S" Z2 N% {# K
  12.             } else {
    & z$ Z/ R! U* k  Z
  13.                 this.checkedNames = []
    9 E) C: [% m, i8 q
  14.             }7 G3 X% |1 r) i& G) H
  15.         }
    & ]% h$ L* V* B' n4 y
  16.     },
    4 S8 ?) g! [( ~% D9 p
  17.     watch: {
    ) u0 c  _3 U) `7 G# l
  18.         "checkedNames": function() {1 `: w7 m8 |$ d  H! w
  19.             if (this.checkedNames.length == this.checkedArr.length) {5 B# l% G9 v# D% A" X
  20.                 this.checked = true
    1 t  z  v& w+ K& ~" m
  21.             } else {: Y3 A! ]7 Z9 n/ U. C
  22.                 this.checked = false/ m1 Y) J: S) v4 D3 b
  23.             }7 v" H* e( M. S( X- i8 M$ F
  24.         }
    ( e! m) ]+ X0 P1 h0 \) q
  25.     }
    * }; i4 Z9 K$ S6 F) ^* U, W& ~
  26. })
复制代码
7 |% G. W& m0 S: d& a5 g

9 w+ S  O! Y: `9 w
% l/ c2 Z  r7 `$ w) O6 |* G& ~3 A. c) o4 n% ~: _
+ J" v' Y+ W+ P) }0 h* ~$ [

( z3 T% Y. W; d4 T# g3 e! [2 f4 I; ^  W' e* j9 a8 m  L

3 ?" `! ?1 ]/ y( f* D, ?% D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-8 02:09 , Processed in 0.117158 second(s), 25 queries .

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