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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

  f: g" |- Q  o! c+ B% ~. b
  1. <div id="app">0 u2 H& d1 Q( P7 @
  2.   <p>input 元素:</p>8 O6 M# v/ [& s& x( {. {+ }. K
  3.   <input v-model="message" placeholder="编辑我……">
    4 |$ h6 {" c* ~+ L; f
  4.   <p>消息是: {{ message }}</p>0 k. O2 O( l  n* D3 `! t9 G
  5.     3 S, w1 V- N, B# v0 l
  6.   <p>textarea 元素:</p>
    " l! j& l3 i' C8 v) M+ z
  7.   <p style="white-space: pre">{{ message2 }}</p>
    1 V  _- g$ L" ~0 c" @% y/ d
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    5 x' M* h- g* j
  9. </div>
    5 @6 P. `; L1 V! W" k
  10. " W4 n8 X5 c1 f, {2 O
  11. <script>
    ) ^% p, |7 [# E; Q- _
  12. new Vue({
    7 [! \3 x9 s  C, P8 r
  13.   el: '#app',
    5 `6 P; Y) o! f6 X7 T
  14.   data: {: |- {5 X3 ~" W( |/ b
  15.     message: 'Runoob',
    ! b- A  V' h- S3 }& N6 P" N" s+ u. K
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    ' S1 c, U' r/ `+ m! S
  17.   }# I# e& z1 v/ m
  18. })
    # ^8 |# ~% p9 z( j1 ^9 _3 W5 E7 ?
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
: f; ~* Q: y+ {
  1. <div id="app">
    , o3 l3 g/ _7 H
  2.   <p>单个复选框:</p>$ T! V: A0 }7 `% h6 I  P) G. l, A
  3.   <input type="checkbox" id="checkbox" v-model="checked">( K/ j2 r& a/ k2 W8 \" Q8 D
  4.   <label for="checkbox">{{ checked }}</label>
    ; `% H  m8 \' `
  5.     / s9 ?) c: d: g6 r5 s: J
  6.   <p>多个复选框:</p>$ f4 d  H. q- k& n. M. Z
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    ) g% v6 i9 r+ C, t
  8.   <label for="runoob">Runoob</label>
    # d: h' c, G/ ~; n9 O( R! }  l7 R
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    8 x  K4 v9 K! k2 g
  10.   <label for="google">Google</label>; K. q$ w6 H1 F* g; [
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">* K1 J" \  w- j  I' v2 h
  12.   <label for="taobao">taobao</label>
    + @7 r* Z3 b+ D0 m5 ]9 a. |+ s
  13.   <br>4 A0 I: z7 N) `, a! _- L
  14.   <span>选择的值为: {{ checkedNames }}</span>
    " Z/ K' e( M! K( X# q. Z
  15. </div>$ L2 u) t3 C; f8 Y( m( U6 }' k8 o

  16. 0 M) G9 T& G' T. N# S9 I4 }- l% u
  17. <script>
    ; B- @' x( b% e# h2 B. [2 f$ n
  18. new Vue({
    ; U8 d- u6 x3 n2 x# _+ x
  19.   el: '#app',
    / [- S' J8 c) }! P; F& S. x/ O
  20.   data: {& C9 [) c8 O4 n, q4 I* \# D7 q) @
  21.     checked : false,
    7 X$ q9 c% D6 e3 c& T; I* L- F
  22.     checkedNames: []7 S) ^4 ~4 w" Y5 d
  23.   }5 o/ ~2 H" v5 O* \
  24. })5 M' f' Q; G' T) |0 X8 J0 V& @
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮" g& W" `. x* Q; a* a9 S. e7 @
  1. <div id="app">
    ! u- o8 V) m% m9 ]: l: m' f' k- t
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">( k6 G7 J# L- R' h% ^
  3.   <label for="runoob">Runoob</label>
    ) }& e- U0 P' x$ i2 O; K
  4.   <br>
    8 y% Q3 |! O3 r- V3 K
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    " f% W& H: Y2 R6 N
  6.   <label for="google">Google</label>
    4 p" G6 ], o8 ?7 ~& `
  7.   <br>
    6 ~. S" g: ~5 K/ m7 y; J
  8.   <span>选中值为: {{ picked }}</span>
    5 j! \6 ?& `& i5 q5 L2 [6 k5 S
  9. </div>. V" {$ f* X2 B( ?/ p% ~- S) W

  10. ( I  s* C, t. T- M
  11. <script>
    0 B9 k. L5 v4 u
  12. new Vue({
    - B/ V4 Y/ S/ M
  13.   el: '#app',
    : k9 U# b, H  J) d4 z( o8 x
  14.   data: {' M  q' l' F% W' A, s2 p8 {- @
  15.     picked : 'Runoob'
    # O$ [& C2 m& O# S& t
  16.   }
    3 k" Q/ [3 C4 b' u: e, S+ u
  17. })- V1 N8 {5 T6 ]  l6 {9 G
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select0 I5 m! h: L+ p, i
  1. <div id="app">
    ) d; x0 X# t! D3 R; B
  2.   <select v-model="selected" name="fruit">
    ! {8 V% j; Y: w: E% B
  3.     <option value="">选择一个网站</option>. p" [: g! ^$ s. \
  4.     <option value="www.runoob.com">Runoob</option>& J- ~, I6 I" M- I8 i1 a4 M' q& ~
  5.     <option value="www.google.com">Google</option>
    * F% ?! K7 g! x9 Q
  6.   </select>3 @) H! r* |9 n: \, e
  7. . \" W4 j/ `5 ], u& I
  8.   <div id="output">& [! ]1 a: b  F' Z
  9.       选择的网站是: {{selected}}
    9 u* y  ]/ A/ P4 ~: J
  10.   </div>* b. {/ D- y4 a4 ^. X5 U
  11. </div>1 P+ N8 V; D) O. R: Y/ B

  12. 8 `4 L8 @/ X3 [' K$ ~6 [+ H$ c$ p
  13. <script>
    ( |0 L/ T5 D. Y0 R' s. S* E0 G  F
  14. new Vue({
    7 T& Y* F0 n3 B/ H( \* l" j0 H
  15.   el: '#app'," X) H' v2 l  g% y! J( J3 P+ [
  16.   data: {/ `3 F; j" [. M3 r7 o5 r- Z" ~
  17.     selected: ''
    ) |, l. j9 P# I) r& ~* V
  18.   }- [, e0 j* v8 @& x
  19. })( b5 X9 h- \; r# V1 F# T' _
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    / }. b( |; ]% d' p1 ]
  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({3 W+ u" _- N9 A) w, A1 [" a6 c1 O  h
  2.     el: '#app',  r. ~* D' Z. z  v
  3.     data: {
    , N1 Q! p! T# Z
  4.         checked: false,
    3 V  E' Y, `6 [0 k  W1 {% L
  5.         checkedNames: [],
    3 B0 [: H% x  ?' ^% R- ?
  6.         checkedArr: ["Runoob", "Taobao", "Google"]  s$ G5 c! w% f' n' ]- q3 n& K
  7.     },
    * U7 [. n' a( B4 Z, w7 S
  8.     methods: {
      H( G4 @! M% v. Y
  9.         changeAllChecked: function() {- ]# y: T  R/ |' n) G
  10.             if (this.checked) {
    " T. \8 @6 d4 M( c1 e$ E
  11.                 this.checkedNames = this.checkedArr  I  O/ d  m" K/ d+ l
  12.             } else {9 l  d" K- c& x& |+ p( j+ u0 o
  13.                 this.checkedNames = []
    ! M* {* P2 ]: h
  14.             }7 o# K  x6 {3 K6 u' N
  15.         }
    3 ?) }' q, N# D0 \7 _; w6 U
  16.     },/ q/ r0 r) v2 `' n
  17.     watch: {
    ; P- b$ g! ?% H
  18.         "checkedNames": function() {
    / M" B. Y5 ^) U# \$ F* {7 C7 u; B
  19.             if (this.checkedNames.length == this.checkedArr.length) {: L) o3 W" d! N5 t+ ]" k
  20.                 this.checked = true
    & B2 [3 R8 V' t+ j( w
  21.             } else {
    2 l! x  I2 B/ x$ `% N
  22.                 this.checked = false/ {  R) [! n: T/ K) k
  23.             }  U8 Y  O" V+ F' q) X" W
  24.         }
    ! A% h4 f# _5 a4 p9 d
  25.     }' X( X  s8 C4 @4 K
  26. })
复制代码

$ V) j  x5 Z6 q. R+ p7 x! t, ~" A. a* {- v3 _4 T
) Z, T2 n0 T- Y$ D

- Q: F, }& c- ~/ Z' Q; D- u# t& m. \# E8 c9 e
7 k/ _. Y! m9 o3 P9 H* W8 `/ E
3 J% l8 B. N- H2 B7 y% b1 `: X  x

5 P/ J1 t% ^# [% p+ ^  \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 21:05 , Processed in 0.129491 second(s), 23 queries .

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