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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

. v9 o3 K3 Q% A2 a* n+ n
  1. <div id="app">3 b- c0 R6 h' D5 Q4 r
  2.   <p>input 元素:</p>0 w' Y0 h; _+ l: O8 \5 t
  3.   <input v-model="message" placeholder="编辑我……">; h( \3 r) w2 ~% j* y" t
  4.   <p>消息是: {{ message }}</p>
    6 l' n6 G9 M- Z- X: W
  5.     3 z8 h$ _$ X" ^. L+ d1 f. o
  6.   <p>textarea 元素:</p>. j$ m$ ]% S$ P! ^
  7.   <p style="white-space: pre">{{ message2 }}</p>
    & N7 ?. _, ^2 g1 F' b: }
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>0 q8 [/ R: S5 i- s) L
  9. </div>
      X- w5 W8 J7 z7 J

  10. ' n( t1 y6 i/ o: ~# F# _, y0 m: `
  11. <script>( I: a3 v3 i+ w  z$ M' P, ~
  12. new Vue({
    1 w2 S. s2 W/ ^
  13.   el: '#app',
    ( t* r. C! i0 ?9 o) ~$ |
  14.   data: {
    5 C* E5 R9 X+ i' [; z  G* B
  15.     message: 'Runoob',
    % ^! m7 A+ X- F
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    ( v- t1 L# z" d+ ~# M
  17.   }. N( o9 j8 H! ~% b' T1 O
  18. })# H; K: h% q+ M8 b. v3 b/ E
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
1 o5 m, G7 O+ I5 J2 N; v$ o+ q9 m
  1. <div id="app">
    - R9 `! I. ^% r6 y9 F
  2.   <p>单个复选框:</p>
    , A, }; V! _  o/ C; f
  3.   <input type="checkbox" id="checkbox" v-model="checked">& j3 P$ W3 h4 n3 O4 N5 c# \# p
  4.   <label for="checkbox">{{ checked }}</label>
    " o) s. t$ D- G( e
  5.    
    4 @0 P; i' [/ [$ H
  6.   <p>多个复选框:</p>0 `1 {/ X( R% }. M6 R
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    6 d3 x2 `: E3 ?+ e6 w/ O  d
  8.   <label for="runoob">Runoob</label>
    / L: o. j8 }. m7 r
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    % a6 R) B! e4 m. i2 p, w& t
  10.   <label for="google">Google</label>6 \4 m5 J) H, L# _
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">( t  ~1 ?1 D  I) L. s( P; W
  12.   <label for="taobao">taobao</label>4 S: K3 W) R5 ^5 w4 D# K
  13.   <br>
    ! j" V9 i0 X1 j, d6 `2 U* o: n
  14.   <span>选择的值为: {{ checkedNames }}</span>
    . A( }8 s0 i8 O5 k
  15. </div>- V% R8 W$ l' M# T
  16. ' s  \0 v& u2 Q) x9 Q1 j
  17. <script>
    * N; R7 E- |3 m& p9 I6 @3 Q* P. R
  18. new Vue({
    ( Q6 m' d0 h( W' ]( ]0 ~
  19.   el: '#app',
    # L& N& ?" U' c. z
  20.   data: {2 Z; j; D2 V* I# r9 {
  21.     checked : false,
    - ?2 O/ M+ P8 P- F1 v' V2 i
  22.     checkedNames: []% q0 p, }) i9 |4 h
  23.   }
    / x# F" |) G& |' S& K
  24. })
    4 `/ d1 Y2 u3 X2 U; N
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
* S7 t9 ?. x, Y2 q8 S9 ]: S9 T
  1. <div id="app">/ j/ p+ u6 V2 N7 I3 S* S) V, ^; C
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    - W3 r* a  a# X! q* L( f. l
  3.   <label for="runoob">Runoob</label>, g8 v$ W9 S  c% g0 Y4 v! T. U
  4.   <br>
    7 x5 v# Y7 v6 g* R2 M4 t
  5.   <input type="radio" id="google" value="Google" v-model="picked">8 W1 H7 W) U2 @; \0 {5 X2 T% S& e
  6.   <label for="google">Google</label># {- \5 _; l4 T4 g5 ^' g& ?
  7.   <br>" x* i; m% Z! D. [3 _4 t
  8.   <span>选中值为: {{ picked }}</span>0 f0 ?% ]* O% U) l5 k: G  `' _, t
  9. </div>
    / d) k% L9 ~1 c( Z$ T5 O; \, G
  10. 7 L5 A, Q4 M6 H  F+ v' z' p6 h
  11. <script>, X0 G6 R& j. W9 x) ?
  12. new Vue({
    6 q7 Z+ `! t1 C) r- {
  13.   el: '#app',
    6 z  L# e6 ?* f+ M& @5 K8 G
  14.   data: {
    8 c1 \7 e: m5 q% I* g
  15.     picked : 'Runoob'- \5 _. O# I, h$ l6 S. n1 f5 z1 e+ B
  16.   }3 r3 ?; Z4 X9 r: r; F6 A
  17. })& c' `# s- A& ^8 U% p
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select& g8 N9 s# k" A2 T) J. l# z! m0 ]
  1. <div id="app">' q- _' S# w6 I( J8 j+ G0 C6 X
  2.   <select v-model="selected" name="fruit">
    7 N! F. v% V+ V1 K4 x
  3.     <option value="">选择一个网站</option>) a+ P$ i+ D5 M* j4 e4 ?) ~
  4.     <option value="www.runoob.com">Runoob</option>
    ' `4 q1 t3 S" S. W( d) q; T6 P
  5.     <option value="www.google.com">Google</option>. |$ O% X; D( l
  6.   </select>; w$ \! V* s! ^& \: m4 @* J2 Z

  7. $ `% t2 S& P  ?3 E8 X8 x
  8.   <div id="output">
    5 M1 ~- d. D# v; [, B3 g* N2 m5 r  w
  9.       选择的网站是: {{selected}}
    9 i' w; k* ?- O. m) `9 ^
  10.   </div>/ u8 A$ v  T! S+ W
  11. </div>6 r) t  [7 X$ k$ U7 s, X6 d, s

  12. * c6 v. A. l0 I' v
  13. <script>
    ! b  t* U8 P2 V9 F# A0 b7 ~! I3 ^
  14. new Vue({
    : |( n- l3 Y& _0 \% B1 R
  15.   el: '#app',6 H( ]9 c+ Z- ^0 O* {7 c; V9 z
  16.   data: {  B" P! ?, v* w: c
  17.     selected: ''
    7 M- {" @) \8 n4 m  y" Y7 A/ [
  18.   }; j2 w9 C4 v3 r; R
  19. })
    , J3 ]5 W8 d2 ^( b. x
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    5 a- z; h5 m% V3 @9 v) 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({
    . K' Q. v: K. C
  2.     el: '#app',4 c- e: o6 j1 p' G" A' Q
  3.     data: {' X$ t) J/ G0 s& @! N. V
  4.         checked: false,
    / p9 D6 k% R( S* @& m' `3 O% N( {
  5.         checkedNames: [],0 c% E3 {: X( C' s& D
  6.         checkedArr: ["Runoob", "Taobao", "Google"]/ d# _' x/ r) `$ Q) V
  7.     },
    9 G2 K5 H+ {0 L1 b! _
  8.     methods: {
    & E2 o3 V$ ^" Z+ b; Y
  9.         changeAllChecked: function() {
    3 L% k- _" y: l" i, ?
  10.             if (this.checked) {
    , X) H$ }) s, C" t0 v
  11.                 this.checkedNames = this.checkedArr
    ' l% a# L/ c  B6 O- w8 t1 _  q1 Q8 B
  12.             } else {  s2 N" i4 x5 M7 j9 ]6 w' f
  13.                 this.checkedNames = []
    6 Y" f  S# N% s* N) Q3 M: G! }6 R1 V
  14.             }
    - p! N$ P9 C, h; a# r
  15.         }  ^% Q) D/ R! }
  16.     },
    # K1 G# |% z: U% U4 C& T" O# t2 u. K
  17.     watch: {
    ' Y1 X, B( ?3 ?& W2 B$ @
  18.         "checkedNames": function() {: D+ j# O1 I; Y2 M5 A2 E' |
  19.             if (this.checkedNames.length == this.checkedArr.length) {9 {& N( L# w( ]2 F, B
  20.                 this.checked = true8 h7 _+ y* O+ L
  21.             } else {
    2 h* y( S2 x- g% d! S
  22.                 this.checked = false
    3 @: Q6 s' V5 y8 _2 h- Q; E
  23.             }
    - d, d( ~6 }$ v1 J1 x. S% L4 t$ U
  24.         }: Y  O9 F7 j: M" L% k
  25.     }! D+ B! B- n  e0 @
  26. })
复制代码

8 \& Y; M9 Z2 L  x7 j. s- A! l" `, R3 @: E
" Q# l7 I) Z  Z' T

7 M, p2 }/ c4 k; U8 i$ e4 s6 b  _1 K& E: `0 j) {' {  s
% {( h3 y* h% ~& z
# j+ L" `* K* i, h/ o
, i: f1 X" ^0 N) Y  A8 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-9-21 05:17 , Processed in 0.054003 second(s), 22 queries .

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