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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

% f5 U7 s  O2 u# `/ w" }
  1. <div id="app">7 y* v0 V, y  Y
  2.   <p>input 元素:</p>
    4 W5 T- H, c0 x! M
  3.   <input v-model="message" placeholder="编辑我……">
    9 x# s- z! z4 [, ]8 ~7 P0 Y
  4.   <p>消息是: {{ message }}</p>
      f$ s0 w. m' ?1 L
  5.     / K$ L3 E+ U2 X, Y4 ?; X# \/ S; V
  6.   <p>textarea 元素:</p>
    * M$ F" V1 I/ M9 {4 ~4 a  t
  7.   <p style="white-space: pre">{{ message2 }}</p>
    , f2 V' p. u2 F; Y% D* e( B7 T
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>3 i! T, [& ]2 r0 F/ Y5 k
  9. </div>
    8 i; m: o9 m4 l# L7 k4 ~
  10. 8 r1 G! t5 g1 n- e1 c
  11. <script>
    % o. S6 {5 a% A* N
  12. new Vue({
    * y5 ?# ]0 c/ B' J9 `# `0 v2 f- O
  13.   el: '#app',  s5 L. u- }, ^) }& n4 N
  14.   data: {1 Z8 @- I6 b' K
  15.     message: 'Runoob',* v1 X2 v+ C& t& n
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'/ [& b4 ^/ g3 m6 R* z: f
  17.   }
    , J9 D$ [3 a" r( v
  18. })
    ( U3 J. x* W# X, D& `% F
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

) _& W% a( P: s7 T
  1. <div id="app">
    # t4 Y7 `# c) t# p
  2.   <p>单个复选框:</p>
    ' T$ u2 R! t1 X; F8 [' b, @
  3.   <input type="checkbox" id="checkbox" v-model="checked"># F/ t3 }6 ]' T0 `1 w
  4.   <label for="checkbox">{{ checked }}</label>
    * Y# A1 N2 E6 s& a
  5.    
    + Y# d6 S6 ^" r! w
  6.   <p>多个复选框:</p>% l8 c. e& U  P7 j3 M
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">/ ^$ B5 S' B6 ^6 E0 u) ]& Y0 d: |3 Q
  8.   <label for="runoob">Runoob</label>
    . n9 ?2 E( z  o( w7 |' u
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">( R/ v: ~' Z* @9 o' L
  10.   <label for="google">Google</label>9 E7 s& T2 j, Y  q1 z- X
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    + G- C3 Y2 x7 n. J  L$ q
  12.   <label for="taobao">taobao</label>8 @! G  F4 D! ~  t7 u- K
  13.   <br>
    # C/ k1 L5 n3 y' J& b
  14.   <span>选择的值为: {{ checkedNames }}</span>
    ' P# _$ N6 h0 u) b9 x. q
  15. </div>
    " r  Z* t- ?# |
  16. ; x) ^# E2 s/ d" m3 `
  17. <script>: _( Z5 g2 N5 p5 E
  18. new Vue({
    9 k. ~9 L) D7 d) K+ @( s" |
  19.   el: '#app',
    0 ]6 K' U/ {+ l4 K# |, H/ K2 s' [
  20.   data: {
    1 `: k8 E. j4 n) ^: ?
  21.     checked : false,, B$ p6 l1 c, Y" O/ @
  22.     checkedNames: []
    % O+ a# ?  R9 [: e
  23.   }5 N% e8 u* z- R
  24. })2 O" W) ~4 {" p5 G) h3 a. F
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
, e8 ?" P3 l- R" B* E) x
  1. <div id="app">
    ( a$ T; v  F) t2 A0 i% p1 I
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">) r) D3 h, {. j
  3.   <label for="runoob">Runoob</label>
    . c& ^0 q2 K  m% ~: ~( F0 T) ^
  4.   <br>  ~+ G& z$ l: ^3 S# C4 V' W/ N
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    ! P  K5 x* r- O& |
  6.   <label for="google">Google</label>" u5 I) v& J, T" d, _% G  Z
  7.   <br>; b3 u& ~4 X# ?, y" D6 G
  8.   <span>选中值为: {{ picked }}</span>
    9 T$ t- C8 L! n
  9. </div>
    ) R2 t0 l/ U; ]- z) D

  10. ; t6 B2 P% X6 y. V$ v, h
  11. <script>: Q3 i$ g, C% }) g% m  b
  12. new Vue({
    . C8 b( Y9 }  p+ X
  13.   el: '#app',4 |# J) t$ v& D% d
  14.   data: {
    - F& L; Z8 [7 j! e" i! Q4 F
  15.     picked : 'Runoob'
    ( u9 V# y2 d- r; j0 \; e( F% V
  16.   }& H' i3 M% F. g# R2 }  f! U+ u5 q
  17. })" {; ]+ Q/ c) v$ U
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
$ Q8 ^* j, L  e( Y# p
  1. <div id="app">9 ]. t3 S: O3 l- h
  2.   <select v-model="selected" name="fruit">$ y! r: S; y) y% S! F" e9 O
  3.     <option value="">选择一个网站</option>
    # z  F* h: E# e  E
  4.     <option value="www.runoob.com">Runoob</option>- x4 S* |" m+ {* N  S  m
  5.     <option value="www.google.com">Google</option>% i# m7 z: K$ N% \, R5 s
  6.   </select>
    7 V6 c* z# i0 \+ T; K
  7. : S7 L: l/ u/ ]7 [- X7 Z
  8.   <div id="output">5 |# [# ^! L. _7 [9 Q, i7 L9 W
  9.       选择的网站是: {{selected}}
    2 s8 Q" l0 W4 t4 I% t( y' ~
  10.   </div>' X6 {" j* H5 s* e% ?: L
  11. </div>+ @* p# U6 a2 J6 v" |

  12. . ~1 a8 x$ C9 f% o  s
  13. <script>
    5 H) p9 p5 z+ }! J
  14. new Vue({) A( M7 r9 w& {( Y! W3 F
  15.   el: '#app',& r( S. j' ]* b3 k  ^
  16.   data: {/ l) J  X: z: T: w
  17.     selected: ''
    - O) d- `, c1 S6 i
  18.   }
    3 Q7 \& ]/ \$ A& P
  19. })! c8 Y* d- H( d+ \
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->+ G2 H! S5 X- |. L! h
  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({! E9 D* p- v8 }* _) q4 u
  2.     el: '#app',- ?. [0 ?# p! U) v1 g/ ^) o+ }
  3.     data: {% _( e2 _4 i, ^5 q; [* R
  4.         checked: false,
    6 K; r0 g0 d, y1 H( Z. t, \/ J& H; Q
  5.         checkedNames: [],! w: P# d+ c; w9 E: q
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    $ s2 T4 I# R  i  M! [5 n4 R. w7 p
  7.     },& x( \  l' u8 D1 o: M# Z& Y
  8.     methods: {+ \7 W1 N# G# Q
  9.         changeAllChecked: function() {' Z. S7 R$ S7 n# e
  10.             if (this.checked) {: z9 T3 T9 u& w$ Y) Z: f
  11.                 this.checkedNames = this.checkedArr
    3 N3 B1 _# I  B
  12.             } else {
    * c( b8 X+ O5 z( C
  13.                 this.checkedNames = []
    + o3 r5 w8 \2 i( r8 s
  14.             }
    7 u( \0 I+ b8 x! a' e
  15.         }) u: c# ]1 Y! s$ O9 F1 G2 n
  16.     },' `+ w% U' Q; V
  17.     watch: {
    9 \% F2 L  H/ n3 ^- ]% j
  18.         "checkedNames": function() {$ m$ Z! i" w- w3 ]
  19.             if (this.checkedNames.length == this.checkedArr.length) {* h" f) P3 ?7 f$ f
  20.                 this.checked = true
    , R5 a& @) q# e4 r( |& e
  21.             } else {
    ; n! r9 Y/ `6 t' y- b- [/ e4 l
  22.                 this.checked = false+ Y! v& I' N; _6 F6 Z
  23.             }
    6 V% F% ?; n0 k* k. r+ X0 V+ k" O
  24.         }
    " C. j* D* q- C3 `' x
  25.     }
    6 h% w+ _) D  v3 [
  26. })
复制代码

- R: X) A( T7 ]4 I3 d' {
( V6 K1 ~1 G; A7 l0 r. _( [: }( @" B% L8 h3 I5 G. \
/ V' Y0 c- q' `* p8 ?
5 m. Y9 ]2 I. _4 x: I, c

4 y9 @3 r2 e3 s; U: a1 V
' w6 M; w( U" k0 `' }# k0 ^
. u- x, D( b3 t; J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:05 , Processed in 0.067273 second(s), 22 queries .

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