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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
5 f$ E/ ^( h5 P9 H
  1. <div id="app">
    4 G, h0 Q6 V  S% e2 A
  2.   <p>input 元素:</p>
    + h! ~7 G- o9 F: j9 Z$ j
  3.   <input v-model="message" placeholder="编辑我……">1 c; H7 t7 c3 |0 a7 k+ Q6 m
  4.   <p>消息是: {{ message }}</p>
    7 o/ F, e/ i. x8 I- v% m# x% f
  5.     " |; p5 b7 l8 v) R" E5 e2 n9 G
  6.   <p>textarea 元素:</p>0 v$ ~; k  i3 \% K
  7.   <p style="white-space: pre">{{ message2 }}</p>( C1 B) |0 p& e6 F' _1 N0 a  O% I
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
      \% I% |" A* `
  9. </div>
    # u; ^# m; q! |! m9 q7 ~8 A3 P9 Z

  10. 6 R# D- U5 @* w4 M% G9 O3 _5 j9 D+ |7 V
  11. <script>
    : O, G# j8 r, f6 w+ @  w2 W7 h
  12. new Vue({
    2 z9 h8 k3 z6 @8 A9 k5 H+ Q% q
  13.   el: '#app',
    & \. w  y; I: k7 s
  14.   data: {" _7 u3 ^+ [" x
  15.     message: 'Runoob',# m6 P! h0 T# I& H6 H
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com': `( r& t% J1 _& `. f
  17.   }# d9 v7 N) ~4 a1 E% Y( s# C
  18. })
    1 \5 K; r. F/ `! B" y4 [
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

7 P& q" C: M5 T5 n+ \5 A3 L
  1. <div id="app">/ B8 S+ b4 g% l7 R. o! @* F& N, q
  2.   <p>单个复选框:</p>8 j9 }& K/ x3 q  r
  3.   <input type="checkbox" id="checkbox" v-model="checked">: h# m( h% R. P( m' g
  4.   <label for="checkbox">{{ checked }}</label>
    $ _4 H& A- L; I5 R* H% |
  5.     " n# `0 U( r, U, ?4 n" q
  6.   <p>多个复选框:</p>
    0 j/ Q7 ?) X1 w2 n! [
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">/ ]$ M& \- d1 r7 T  o4 f
  8.   <label for="runoob">Runoob</label>6 p! k, k' X% u( P  z* D0 ?' S2 J
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    4 d7 j/ n: V- Y. A6 U+ t( f( {
  10.   <label for="google">Google</label>7 l* u! T; C( x8 q7 ~( U- s
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">  [- O3 N/ H, x* y: u
  12.   <label for="taobao">taobao</label>3 V8 G& q" j' q& Z6 V$ `+ B
  13.   <br>
    ( O9 v% @; r" Q) R% |: X7 z
  14.   <span>选择的值为: {{ checkedNames }}</span># i  X, |) r+ B; s& U2 r
  15. </div># u5 r: c2 Y; n3 W0 C! {: t+ Q
  16. , t7 }; W5 j8 i: J% t
  17. <script>0 l1 c1 K8 L6 a" m& p1 l/ i
  18. new Vue({5 X) v* A$ W/ `9 j  @1 k: a
  19.   el: '#app',
    - i9 v( k8 E' R7 Z% R
  20.   data: {. _1 s3 z9 G) p7 B9 e
  21.     checked : false,2 M4 s8 m1 Y8 s5 x
  22.     checkedNames: []
    8 a2 o9 c. d) n! W; m! V) k
  23.   }. A0 k% u' T9 z+ k
  24. })
    8 H$ Y( H& p8 V) j4 S4 F$ `
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
, P- m  H) I) {0 |3 g) V$ x# Z! L
  1. <div id="app">
    - S% L1 O; `$ r
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked"># W- I: x! ~3 B2 _0 |
  3.   <label for="runoob">Runoob</label>  Y! L2 p7 t" ]0 e' b  v0 E- G
  4.   <br># K$ `& n* f0 k5 }7 a) i, m
  5.   <input type="radio" id="google" value="Google" v-model="picked">2 [0 @+ K& M# d3 P$ {/ [. T
  6.   <label for="google">Google</label>
    8 w) \6 C. a) Z% Z
  7.   <br>5 H7 f. X8 v6 [
  8.   <span>选中值为: {{ picked }}</span>
    $ k) S: L% o2 |3 {
  9. </div>1 c) E! M8 l/ Z0 w; m& V2 U$ y

  10. ) U: i" f3 P# k1 g; n; {
  11. <script>
    2 h; k( _, z  e+ u- M
  12. new Vue({5 l, T5 S& k, N2 l
  13.   el: '#app',
    0 A+ t& M% M& w2 c8 q) X
  14.   data: {
    3 y! ?3 W0 x+ `4 F/ {! }3 y- O7 L( q
  15.     picked : 'Runoob'
    * b* N/ H6 c1 y. T+ R2 F9 W
  16.   }
    0 K0 V/ n! R: P7 C3 {
  17. })! {) ]# y, ~2 Q+ f& v9 x, A* d
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
5 U) i- b$ X& {% D' J
  1. <div id="app">
    * _4 ~: ~* }( P/ C
  2.   <select v-model="selected" name="fruit">( T2 L5 d& ?+ T
  3.     <option value="">选择一个网站</option>
    & S! |. y4 K2 ^2 K
  4.     <option value="www.runoob.com">Runoob</option>6 d( V, p% _+ }+ ?. N! X
  5.     <option value="www.google.com">Google</option>/ V3 ]# h) S! L0 i" C$ @- w. C
  6.   </select>
    9 O! `5 X" w& x/ G/ ^& S
  7. 8 Y# Y2 B! b* Y2 \2 j
  8.   <div id="output">
    ; U/ [# e6 J! G4 e# L3 N4 b' I. V5 F
  9.       选择的网站是: {{selected}}
    % m' ^2 g& A/ g- q+ \
  10.   </div>
    3 T8 `1 M9 R) b0 V) Y6 L. S
  11. </div>! D9 G: n% n: l8 T+ M
  12. / w5 e& O# `9 E# S5 }; ]
  13. <script>
      `' ]- h; ~3 }+ _& m# h
  14. new Vue({$ G! U, ~; P7 y! O7 n
  15.   el: '#app',
    , ?. S; ^% ^/ O2 ^- r" w
  16.   data: {
    6 A& W. `* l- k0 s$ S
  17.     selected: '' ( t: K1 k5 R0 _, T
  18.   }- s' J+ G4 H  {. Z" ~- W$ z
  19. })6 t# U  ^, A+ E) t6 r
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    ( ~2 p! o9 T8 x! ]& H9 o1 }
  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({' ?7 D/ I& ~, z/ H# M$ i
  2.     el: '#app',7 Z! l6 [! Q/ t' q% C( _% X
  3.     data: {
    5 q% Q, u8 H$ ?7 `# Q- {
  4.         checked: false,& m: P, c* [. @8 E( }0 d# P
  5.         checkedNames: [],2 o) M+ V- W& ?" N8 Q# D
  6.         checkedArr: ["Runoob", "Taobao", "Google"]0 H0 n7 J  Y% \. B
  7.     },
    & T! t- s( }6 A; R% u0 h, I7 r
  8.     methods: {8 W; \: N8 r" }% j3 O- g
  9.         changeAllChecked: function() {
    " k; e" `3 p" B# j( Z+ x
  10.             if (this.checked) {: M, v, e0 e+ {1 }& s8 X
  11.                 this.checkedNames = this.checkedArr
    3 |5 ^0 ?( A% U1 G5 O
  12.             } else {
    ' v! K) y& \$ b, k& o% G) O. g
  13.                 this.checkedNames = []
    ; T/ Q; t+ k. ^
  14.             }
    1 T1 z/ j9 P4 Q0 x. R1 _! `
  15.         }
    , @# q0 K2 i- H$ {
  16.     },
    : {+ y1 K" [! W5 [" f" L
  17.     watch: {% Q7 x1 k6 ~5 {  `- ^8 \* I
  18.         "checkedNames": function() {
    ) F2 |/ D" l7 _  N+ B# w9 V
  19.             if (this.checkedNames.length == this.checkedArr.length) {0 u4 x3 Y7 m  E- p
  20.                 this.checked = true+ p# V8 J) |4 D8 H, j( q0 A+ F
  21.             } else {4 V& E; v9 m6 V+ W) l' @
  22.                 this.checked = false
    $ P  z4 u0 i, {5 g. w7 c
  23.             }! e" e# ?" H5 }! \
  24.         }8 D- g( ^/ c4 t: Y
  25.     }3 C7 V: O8 ~3 f, w" [+ V/ v6 @* u
  26. })
复制代码

8 w5 W! a0 v4 G0 r6 `4 o' s& M
$ E' [9 ]( M# I  ]3 U' Q& b4 t6 U7 ]7 z; a
! z5 \( z' L1 T2 L! d+ z

* M1 f; X, P+ S% C* I) }5 y( I
+ H  |$ d3 H* a
$ C$ B' M0 r) E8 z
/ y/ ]( J5 E" F4 x* R0 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 21:28 , Processed in 0.118731 second(s), 25 queries .

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