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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
, \! E* o4 C7 }6 ]& m
  1. <div id="app">
    5 Y5 r% o* j9 L" E, v4 K% g
  2.   <p>input 元素:</p>
    & c+ D! m' X9 L' D( r
  3.   <input v-model="message" placeholder="编辑我……">
    + N! L; Z' ]8 x% O. g
  4.   <p>消息是: {{ message }}</p>' Y9 m8 R# t$ Q+ h7 g
  5.    
    - P; [" N, g: @4 r  O+ Y6 r
  6.   <p>textarea 元素:</p>: a2 U& c( h% H, m/ @* C% Y& z4 l
  7.   <p style="white-space: pre">{{ message2 }}</p>
    ; R  Q: @4 o7 ~! A* A+ p9 c6 C) ^
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>7 n% j- ?& w# b  b6 F
  9. </div>2 r* e4 M6 b; a+ k

  10. / o& G4 [2 \. I8 v
  11. <script>
    1 Y% R  H; c. x8 }) v, J( M, B
  12. new Vue({
    4 R/ q, _$ N* c/ @* X# I
  13.   el: '#app',
    7 v# ~; P* ~" z, T" ]" O
  14.   data: {$ d( ]8 ~: h1 \0 g) r: {
  15.     message: 'Runoob',
    $ F  u6 f) D6 U# @
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    3 f& M: q$ i" @
  17.   }
    5 t% P8 b1 z* I; T, {! e: N
  18. })  F9 n' y) c& ^- _6 e
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

" t. i/ a7 k% }. m5 ^) A
  1. <div id="app">2 u9 g) X" J8 ^2 v# U! Z+ t7 `6 W
  2.   <p>单个复选框:</p>+ w/ J8 E) d; i- l' ?) Q! d
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    ; v7 ~! e$ M5 @2 c
  4.   <label for="checkbox">{{ checked }}</label>( o8 X" P' I' A, E: k
  5.       O5 P5 _2 p" ^- x  r3 R9 J+ \4 K
  6.   <p>多个复选框:</p>* d8 ]1 R- G8 @: c0 \
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    4 ]1 K; @8 |& W9 V" `
  8.   <label for="runoob">Runoob</label>: J  N! n1 e# n; O
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    6 G1 x8 U; T2 [3 a* p
  10.   <label for="google">Google</label>
    7 @0 H3 H$ }" ~& |$ ]
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    0 O+ U% `! M  K, m" H9 I
  12.   <label for="taobao">taobao</label>2 t" Q: r! [# `9 H
  13.   <br>
    7 T# I. X' ~. M1 B  ~0 L- s3 K8 U
  14.   <span>选择的值为: {{ checkedNames }}</span>- `/ Y+ C: x7 z
  15. </div>) b: _8 U- P' D6 E# s
  16. 3 U0 v. i0 q) R: K8 ]% w
  17. <script>
    + [7 |) k5 d: q4 I3 q! ?
  18. new Vue({: V( P7 t5 L4 t7 o" z; {
  19.   el: '#app',2 K5 U$ @$ \' `+ v9 u$ m
  20.   data: {
    # ]. p# x: f! ?
  21.     checked : false,
    " Q6 t& f- _& _1 P" {! E# e1 c
  22.     checkedNames: []
    9 n- |0 M1 O# M6 M- N" a8 {+ U
  23.   }
    % `& E1 ]5 Z  P+ I& t) F: N
  24. })
    ; \" C9 s3 Y* c* m/ p
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
( ?/ K2 r$ _# q; l
  1. <div id="app">
    $ a  A6 j- R6 C+ y
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">0 b! w' ~, F# P! g
  3.   <label for="runoob">Runoob</label>& A5 L# r0 x' q$ i
  4.   <br>
    ; j- V- k# y/ ?" d3 k- V
  5.   <input type="radio" id="google" value="Google" v-model="picked">. w$ d0 p, l# }- @, L% n2 O
  6.   <label for="google">Google</label>
    $ a$ x8 U( H, v5 [  `
  7.   <br># n* W0 K  ?" V" T2 D8 U
  8.   <span>选中值为: {{ picked }}</span>( |5 Y$ t9 B) \8 x0 R. D
  9. </div>, D8 d/ n- V9 U2 k5 b+ {5 D2 @
  10. $ ?/ H4 ~7 i+ j9 X* x
  11. <script>/ m( X0 x+ C3 O! Q( p5 N2 E6 Y2 z
  12. new Vue({% R  H6 r9 A( y9 Q0 F% Y1 q6 @# U
  13.   el: '#app',
    ; a: V# N" o% j( r. a
  14.   data: {8 F5 t$ }$ n5 C6 s6 l4 U
  15.     picked : 'Runoob'
    - t! H$ G! S7 n5 w5 y3 B
  16.   }
    4 P  I5 W6 ~1 T$ W) r4 I# ~% S8 r
  17. })" E* T3 I5 |; E2 c* x. p
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select7 E! c- z' h% p: Q, ^
  1. <div id="app">
      g) Q; l- O9 x6 R  F0 _- Z
  2.   <select v-model="selected" name="fruit">
    , s' k% j6 Y0 \/ C- q8 L, E* \
  3.     <option value="">选择一个网站</option>
    # q4 x9 X3 M/ N. p5 `
  4.     <option value="www.runoob.com">Runoob</option># t1 X' G9 f1 l
  5.     <option value="www.google.com">Google</option>
      m# j+ H/ B0 M1 A* Q- G1 ~4 [% {
  6.   </select>0 ^6 U2 _# z" {  R

  7. / C5 v$ E; h9 r9 k, R  C
  8.   <div id="output">$ _, A3 q: u3 \
  9.       选择的网站是: {{selected}}8 v+ L! ~* i# g
  10.   </div>
    1 ^9 d: s/ O& z- z) b& f& _
  11. </div>
    ) ?6 \: k, T5 P) t! I

  12. 4 u) ?$ g: f3 L
  13. <script>- T. D& R* G5 j" L; a
  14. new Vue({
    0 @! f, n& @: Y: E/ i, u2 F( N0 Q) p
  15.   el: '#app',
    7 v# y, D3 ]' g1 q. t2 z
  16.   data: {
    . L; x/ q* l) h' m9 V) _$ W- ~) M
  17.     selected: '' ; w! W1 z" u) ]* S% H
  18.   }3 Z* @; e3 b" c, Q0 L* e1 e( x+ L
  19. })
    # x+ ]! x- I0 o" A, H& z* _% |
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    ! d' M; k+ F5 q9 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({( g) e" \2 E" d
  2.     el: '#app',
    5 t; O- w) F8 f2 A$ x
  3.     data: {7 r0 |7 R: H9 u1 h5 U# o3 e4 f& ?
  4.         checked: false,
    0 b* s  X( o" d) n3 s/ R" K
  5.         checkedNames: [],8 }4 E: _+ t, T; u  ?( W
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    0 @, o9 b6 N! `
  7.     },# f- _# r- P- U' L. T: {
  8.     methods: {
    1 r& b8 V: h) t5 i+ k$ S% a+ g- a
  9.         changeAllChecked: function() {2 H% D& B# p, g0 a" L
  10.             if (this.checked) {
    / B& j' M* N2 B/ ^  W* q
  11.                 this.checkedNames = this.checkedArr
    7 ?0 h+ ^0 Q$ _: e
  12.             } else {
    ( \0 o3 Y1 ~1 Y- n1 G
  13.                 this.checkedNames = []
    & U  v9 r9 `1 X2 n
  14.             }4 X0 I' v- c% ]5 S4 D4 x2 h
  15.         }9 l9 C5 k* x7 Q3 t
  16.     },; t8 O& I5 U3 d6 s) V# P
  17.     watch: {
    ' w# n0 P" g4 X  T2 ^
  18.         "checkedNames": function() {+ U: y# t8 r* i& z5 z7 q
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    8 l/ K9 Z5 }9 i' K: {1 G1 U0 C
  20.                 this.checked = true
    , L0 X* e2 z1 E' _
  21.             } else {& K6 |9 ]# u+ |3 c5 X4 }* [7 e
  22.                 this.checked = false
    8 R  r- n+ b, H
  23.             }' ^) o* d* e8 A( D: g
  24.         }
    9 t+ B( b. s  x2 [/ C
  25.     }  C% q  l5 b: e, D' @' V! y6 P
  26. })
复制代码
5 r* B& n# S) O- Z) k! s/ R
7 l+ l* f4 j: T8 U, I+ y# |
! M& K" r4 Z3 Z) B1 Q

8 Y& E) b7 G' U5 F8 Q) R' ^, I6 K( O9 U& ?% y: F* E6 u

; U5 f- J& P. V8 |% I! r. q% T7 L) Q7 j9 K; }7 L, D$ J( D
% z2 [/ r$ a3 }1 v% w" D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 15:30 , Processed in 0.094314 second(s), 23 queries .

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