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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
" M( K# i; H4 Y% }  [. \$ f
  1. <div id="app">
    - d6 E. O+ U3 @4 z* V% o
  2.   <p>input 元素:</p>
      D' e, ^: D. v7 }# A
  3.   <input v-model="message" placeholder="编辑我……">6 [# q/ D! T3 Z4 _: A- L8 c' v
  4.   <p>消息是: {{ message }}</p>' |  O" ]# b  |; U  _
  5.     " R7 u" m5 [% X% L! j" p
  6.   <p>textarea 元素:</p>0 ?% F  s- Z0 p9 q* T) u4 s4 |
  7.   <p style="white-space: pre">{{ message2 }}</p>
    ! x% N/ a2 G- H
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>0 v1 ^1 Q; `8 ~+ j% ?+ _, U
  9. </div>$ u& [. w5 I4 k1 s2 A- \. j

  10.   p. i( A/ S- \6 c: w0 B' h
  11. <script>
    8 E2 F5 \7 y' l: l
  12. new Vue({) A3 P/ j) |7 C$ M+ b. Y- J
  13.   el: '#app',- [3 A  c1 n1 Z3 W% H( o
  14.   data: {
    % F$ D& I1 o2 \8 Y) d$ x( Q
  15.     message: 'Runoob',
    % @, t0 p. t: R& L! K
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'& n, |/ d' v" I
  17.   }1 q( `  p* M& A: r  H
  18. })3 _6 e6 k  m! C$ y
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

. b3 H0 Q" t" E; p! |
  1. <div id="app">8 g4 X0 `/ O8 s
  2.   <p>单个复选框:</p>
    - {! A' s9 n3 [4 v) _
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    ! d" F3 e6 d9 |7 z% Z
  4.   <label for="checkbox">{{ checked }}</label>
    4 t" n: r% I/ u7 Q2 l
  5.    
    + U4 B; S* ^& e/ l- A
  6.   <p>多个复选框:</p>: V  u0 y0 b1 v$ i
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    & W7 q, Y; m, b' D$ \3 g
  8.   <label for="runoob">Runoob</label>
    ' }  G8 l. ^/ z6 A
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    ! P- S2 y! A/ O0 Y3 n
  10.   <label for="google">Google</label>
    , A  ?* R" H/ K
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    ! }, D! c# R+ P+ I) p& i) F
  12.   <label for="taobao">taobao</label>% e1 C2 E( @  U7 V0 R7 {! @
  13.   <br>& A' x" W6 N7 t9 M, E% Z% d
  14.   <span>选择的值为: {{ checkedNames }}</span>
    1 j. S1 v# O' d( u" ]. k: o8 F* w; v* ^1 _
  15. </div>
    " m' h. A9 G  ]7 r$ o5 w, t

  16. 2 Q" g. W" @* I+ B) k
  17. <script>
    ; C2 `7 |" d9 A! r
  18. new Vue({) C2 M0 f3 u2 D4 h* T$ Z
  19.   el: '#app',
    + K  o) @  v* `' R+ X
  20.   data: {
    5 ?0 J1 t) b% N4 r( z- H
  21.     checked : false,
    ! ~/ x1 `7 I9 S7 y' I% P( S
  22.     checkedNames: []: q' Z9 E& N% W8 [+ }
  23.   }
    7 {: p& ^1 x7 R+ y
  24. }). t3 E3 x3 x. l7 q& F+ ^" l
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮" G: O2 m# E6 F
  1. <div id="app">
    0 D5 m1 G3 d5 Z4 a
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">/ o: {1 O- g( K$ ?5 ~
  3.   <label for="runoob">Runoob</label>2 Y# Q/ P' V4 S, U
  4.   <br>7 c* W+ b% ^6 o. n5 E
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    + k$ k% U* V' w3 Q/ Q, e! O$ E! N1 m
  6.   <label for="google">Google</label>% X4 @( e" R6 S& F6 ?
  7.   <br>0 V7 u5 {4 h! X( |& E
  8.   <span>选中值为: {{ picked }}</span>  \0 y( g1 j% P4 j" l! d: r  s" |/ ~6 z, s
  9. </div>0 V* Q8 x+ W9 t

  10. ; S, F; d4 @# X* L8 W& |
  11. <script>
    ! N% @+ S) I$ Y% @6 q
  12. new Vue({
    " O1 m( R0 \  {1 g: ]2 w5 h/ A
  13.   el: '#app',
    2 @+ R; g2 @8 m3 q- p" j' C6 r
  14.   data: {
    + b0 M/ a5 S* r/ @: b
  15.     picked : 'Runoob'
    8 z1 k$ o. e, O" t" [
  16.   }0 X& w" e6 N- K& Z
  17. })
    + `! y, |1 ^! J
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
% O# {# G* B0 n) t; K0 ^+ ~
  1. <div id="app">
    ! Y$ c5 _; \; B+ @8 c
  2.   <select v-model="selected" name="fruit">
    : u( H" ~* F8 Y2 O
  3.     <option value="">选择一个网站</option>
    7 v( d$ C; U2 _$ v
  4.     <option value="www.runoob.com">Runoob</option>
    ; F; |. m" _: }* c4 I8 k; r6 w( y
  5.     <option value="www.google.com">Google</option>' Q* F/ [9 V/ N: q
  6.   </select>/ z* |- U% W1 ^' e
  7. # C* _4 o. ]$ Y3 }7 j& [2 S; D
  8.   <div id="output">
    & z4 `3 |& ~: u( q; h3 C1 ~3 d
  9.       选择的网站是: {{selected}}
    , G. O) d  i' n; `
  10.   </div>2 g- H4 c7 M" d0 a* E8 l
  11. </div>+ F  n  k$ `5 o' k. Y
  12. # W8 ^8 c  j! q: c
  13. <script>
    0 b; r, F0 n( o4 x% p! X5 Y7 A: y0 ]- h
  14. new Vue({& H( x% d6 i8 f4 F; t
  15.   el: '#app',- V9 y4 @7 L8 F" ?4 r6 p& B
  16.   data: {
    0 R+ L6 ]( {4 o5 ?/ d0 X$ B* t. x
  17.     selected: '' ' j* D& }( I, }  ^* U* |
  18.   }1 s! k! i# m2 A& m
  19. })0 W" k: `/ @. v+ i, l% a" V# U9 N7 R
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    + W) E0 F! g: R& i
  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({
    0 @2 z# S6 E8 `' w2 m* i1 c
  2.     el: '#app',( {( P1 v+ O- ^5 N$ b8 Z4 |7 l# p
  3.     data: {1 ^% q) Q' j+ O! b
  4.         checked: false,
    + W) R- P$ g, x' f) p
  5.         checkedNames: []," C6 [/ z. h" w% w$ O& y; V9 J0 D
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    ; j# T' P/ m1 z% h8 p
  7.     },* \1 F' @. S; c: F$ x1 [
  8.     methods: {
    ) j+ a8 G( v8 W- ]2 L
  9.         changeAllChecked: function() {( m9 \* @, A) D
  10.             if (this.checked) {( B. J8 N7 z1 M) G2 k. ^
  11.                 this.checkedNames = this.checkedArr
    % y; V7 @& j8 P. n9 C
  12.             } else {- W- N4 G" U: w. J, A8 _( n
  13.                 this.checkedNames = []
    " e0 [  e* y% K2 `
  14.             }
    5 K# e: E, l' r& u( O
  15.         }
    1 U# _$ B% T/ _: M* x' n$ B
  16.     },7 ?! k8 t* j6 F& ^# T* C- `# E
  17.     watch: {
    4 u' X/ w4 i( a* {( @  U
  18.         "checkedNames": function() {
    5 I9 A4 M% @. E6 R5 H' Z$ S/ z
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    5 `8 j$ B3 d3 I4 n9 w  \
  20.                 this.checked = true5 F1 d3 \& l; J) z7 u2 a
  21.             } else {9 C  N, k+ N6 i5 F& b! j3 L9 P4 G
  22.                 this.checked = false
    ' ?& I8 C* ]4 P+ ^5 l, i, T
  23.             }& a  \8 j0 E; R+ R7 p0 |
  24.         }5 N% l! v, G, @8 c: y
  25.     }+ Q3 n: I6 p! f8 E, ?
  26. })
复制代码
  f0 B. e/ a5 h! ]5 r0 v
6 ^( N  \& c+ c& `& t7 X
& ]# x- P; Z/ |3 O

& ~; q% G; l* N; e! \- m1 w5 l. N5 o; |% i9 h& j

+ y" m5 Y0 l' i0 P. A3 f* ?" X% n  O& b+ P( o0 h4 c0 e- H

+ T2 X3 p% M* j  a* _/ |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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