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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
5 @0 g' S8 f' W, }. g
  1. <div id="app">( o9 b$ |& z) n( B
  2.   <p>input 元素:</p>
    % X+ L7 f) C7 ^7 T  {1 r3 L: n
  3.   <input v-model="message" placeholder="编辑我……">, ^. r- G. C) v: v) Z0 |9 Q
  4.   <p>消息是: {{ message }}</p>* P4 ?0 X- s2 }1 \$ J
  5.     # ?# ]1 M- j2 b9 I* @/ q
  6.   <p>textarea 元素:</p>
    1 C$ H! t/ R2 l5 ?, ~9 z2 V" l
  7.   <p style="white-space: pre">{{ message2 }}</p>/ J" p  m. b' ^3 n( {1 G; s
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    . R9 R: c. M& Z5 Q/ j5 \" I
  9. </div>' h, h9 T% d% ~+ `/ X$ V# E
  10. , ~3 U9 K/ F9 U2 T* r& d+ ]9 M' `. l
  11. <script>$ g$ E, b' a1 R' b# U9 [: _
  12. new Vue({+ {8 q7 t' ~# p: W' l( Q7 V
  13.   el: '#app',7 K; c$ f) C* @* |$ ?1 X9 H
  14.   data: {" i! Z6 M3 D, E$ D, N- \+ g
  15.     message: 'Runoob',2 g+ L1 Q1 ^( V& K# X: r
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    ' p! n( ~: j- M' ^2 c2 I3 N+ s; ?
  17.   }
    ! z( [5 T* s7 a) V) J7 v7 s
  18. })$ G- O- ~" s# N  E; I/ W  h
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

' R4 T9 s1 Q0 s: u/ N, w
  1. <div id="app">
    + l5 o( I9 ~( e8 a$ L; D
  2.   <p>单个复选框:</p>& K, b& k; `$ n9 d( R
  3.   <input type="checkbox" id="checkbox" v-model="checked">. A. _9 J) q' ^: J
  4.   <label for="checkbox">{{ checked }}</label>- J/ c+ s8 d; l, [* j( t* h7 v
  5.    
    1 {% P( i2 E3 q
  6.   <p>多个复选框:</p>- G5 {7 C: i! ~
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">7 ^7 D7 |& w  v7 ]/ z6 T$ H
  8.   <label for="runoob">Runoob</label>- P9 a! }* D4 |0 o. o
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">! h3 u6 r+ K+ G' Z) \9 F
  10.   <label for="google">Google</label>
    8 I1 P8 _: c+ ~. Z6 \! X5 q! n* ?
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">  w4 @" P2 X/ ]/ F1 A2 _9 c! d
  12.   <label for="taobao">taobao</label>' Y2 _( H) o0 z+ Z! U5 ^
  13.   <br>4 S) L' t0 u7 p9 M
  14.   <span>选择的值为: {{ checkedNames }}</span>
    7 @7 O* E9 W0 J5 j1 i  {
  15. </div>8 I* I9 [$ u$ Z+ W! m. D0 |

  16. 2 B8 l) g7 T- {4 P' Z  R( ^
  17. <script>
    . K) Q5 w! e7 M5 M# |+ V/ q
  18. new Vue({: W- X8 c* F$ b: q* O* A
  19.   el: '#app',
    4 \* l6 e. Y3 v+ z9 X- `( p
  20.   data: {
    ' ~9 m* p4 n, Y; j1 F6 Q5 m" E
  21.     checked : false,
    1 S6 b7 y: H: p  l' q
  22.     checkedNames: []
    ; o& r( @' q& B- t1 I1 T+ m" x
  23.   }
    + _8 G: P2 g' O- J6 _
  24. })
    ! w' ]& M) f- m7 p; O' o
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
. D: |- A' M! k' m; u/ u
  1. <div id="app">
    3 Q. u2 }$ }. J; }; v4 F
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">; r, u  u( F* c) m
  3.   <label for="runoob">Runoob</label>- `2 x  G, c- v
  4.   <br>4 a2 V) ^2 U$ M! e# W# {; {" G
  5.   <input type="radio" id="google" value="Google" v-model="picked">) T, f2 V7 F3 L& m, b7 `( N( Y- M
  6.   <label for="google">Google</label>
    * }! X% i5 U: w  J" z/ U# J! x3 Z
  7.   <br>$ X: d% a6 w, k8 J! h
  8.   <span>选中值为: {{ picked }}</span>: B. X1 t# O7 {& I
  9. </div>
    6 S9 D; z% G/ F  H+ ~

  10. 8 Q; \& M' N4 `! \. S1 H
  11. <script>
    , j9 v7 O+ f8 H5 B7 r) P2 L) r+ @
  12. new Vue({( l8 z% ^2 D  O7 m' c. Q7 E
  13.   el: '#app',
    ' C4 Y) N1 T$ \) N
  14.   data: {
    0 e3 S6 Z/ w' L3 Y+ B  [
  15.     picked : 'Runoob'
    , V  e  s- k* W8 v/ d' q6 ?
  16.   }. B& p4 V- Q8 o8 C& Z0 W7 q
  17. })
      |6 C: u1 c3 N! S0 R/ p
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select1 j$ D( M" p1 O: u
  1. <div id="app">
    " R% h' t2 O0 N5 V5 I1 _8 {" g
  2.   <select v-model="selected" name="fruit">
    8 V3 p8 F; r/ w9 G! l1 V
  3.     <option value="">选择一个网站</option>
    8 P+ ^1 P0 `. ^9 h) s
  4.     <option value="www.runoob.com">Runoob</option>
    . @+ t5 q9 X/ B) R5 P  _! H4 w/ p
  5.     <option value="www.google.com">Google</option>+ Z; |1 R# X6 u& Q! f; L. t
  6.   </select>! r6 T7 e* M7 W' O* U
  7. * }; b; ^2 O+ I! L( \7 C
  8.   <div id="output">
      ^4 {! f$ B2 l0 I4 N# O+ \' u# d
  9.       选择的网站是: {{selected}}3 s7 v. ~0 D0 }
  10.   </div>
    8 e7 i% j5 u) d, l
  11. </div>* E6 r$ x7 O& S9 b  [+ l

  12. ! d; l( H) O8 I: Z: Z
  13. <script>
    " \1 W  e1 |- B. x
  14. new Vue({
    2 J) ^0 M: r$ t
  15.   el: '#app',
    # F0 v( i* }7 Q) M! |
  16.   data: {
    5 ~3 A; |5 X6 D+ J( K( Q- @( g
  17.     selected: '' 4 ?7 B/ l4 V4 Q9 ]8 T& _
  18.   }
    ( \$ y: k. i" C( n. e
  19. }). q3 V! t+ C9 D1 U' r8 w
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->! U1 B) [7 J) N8 X
  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({$ l6 ]0 K. m0 ^
  2.     el: '#app',% `  H7 r' \7 ^: ]
  3.     data: {
    1 V9 Y) v" S! Y" s/ n- |# D
  4.         checked: false,
    ( u+ G" @* x3 s- [& j
  5.         checkedNames: [],
    * Q+ b" b+ X  P; G; ^3 l9 U9 a0 V
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    $ {' V+ N5 w- s5 q0 A! N& R
  7.     },6 n5 A  W8 u5 x- z
  8.     methods: {8 T; L& L3 S- g8 A
  9.         changeAllChecked: function() {8 g  ^- @( s& G  b4 X
  10.             if (this.checked) {& R  q- N# o9 i) C3 w2 s6 ]6 Z8 b! S
  11.                 this.checkedNames = this.checkedArr
    9 E3 H' V5 _  Y! ?  n5 N/ r, M7 G7 L
  12.             } else {
    " h0 B5 D( L/ o+ @6 }0 ~) `7 s+ J
  13.                 this.checkedNames = []% e/ J$ ~* H5 a2 d& i0 e# U
  14.             }; s6 j2 ^- O9 P* @# l: \
  15.         }- p& `# U. U4 Z3 q: @# C. `
  16.     },/ S- e( _& g$ [, v# A
  17.     watch: {
    & G6 l+ R1 B% X; T
  18.         "checkedNames": function() {  `7 R3 U" E' f* Y
  19.             if (this.checkedNames.length == this.checkedArr.length) {- m; u! I8 P: Q* R6 r. J  p
  20.                 this.checked = true
    0 N% n& T) _+ j- T% D
  21.             } else {
      p) l" S" o$ `) e$ p/ q3 S
  22.                 this.checked = false& S# g- B0 }( J
  23.             }
    2 `0 s2 P' A! u% n; f
  24.         }
    ! b, C8 a/ o7 ^" k* x# g$ d
  25.     }
    : Y& U" T# x+ p  W, H
  26. })
复制代码

" g; p9 {0 S4 v: J- c; L- \+ I& r! u# g0 T$ E9 s4 M3 w# `
  u2 p9 c/ X. y( p

' h0 A( U3 o4 N6 c# C
, [2 @6 B' y+ _) B. Z
2 Y1 w( k9 h% A( j& X. L
) K# o4 E$ M3 M5 P( ^* U2 `7 B% }$ v! ~5 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-1-30 15:05 , Processed in 0.058611 second(s), 22 queries .

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