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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

9 K) h/ e1 |' P/ B" ^+ `
  1. <div id="app">
    ! s! u) D( O, j3 I: G' X3 R- m
  2.   <p>input 元素:</p>
    . b6 a+ o9 h" t
  3.   <input v-model="message" placeholder="编辑我……">& W3 M) L- [( h* e
  4.   <p>消息是: {{ message }}</p>7 E" a8 v4 Q2 D& a% t# w
  5.     $ q' @% t/ Y1 [# o. j. \( Z$ K
  6.   <p>textarea 元素:</p>- |- d8 c. |3 @$ ~& j5 @% m/ p2 \& o
  7.   <p style="white-space: pre">{{ message2 }}</p>
    0 o! d3 Z1 w9 [" s; d
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    $ E) o' e  `, p, w, t
  9. </div>
    / V- ^- y9 Q4 u* h$ I" m1 E: p
  10. + ~' |. s* F  p
  11. <script>0 f: o5 m/ V$ j
  12. new Vue({
    2 e% ?1 W! ]) ~/ n: p, _
  13.   el: '#app',  ]  e( j8 J- G1 f7 }' `
  14.   data: {
    , H; C( b2 o! Z2 Y2 K) c# d
  15.     message: 'Runoob',
    0 j; _6 a! v6 v9 U
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    2 K" n: q! z) D
  17.   }8 n2 ]$ q8 p4 W1 g" U3 T0 L, H
  18. })
    " ~. K  d' l; f& b% t
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
, K0 m7 K* q) F" c9 p
  1. <div id="app">; g$ o* f: z9 f1 [1 D
  2.   <p>单个复选框:</p>+ F' q# v, y7 J1 }
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    * `% H( G0 T/ W5 P/ {2 J
  4.   <label for="checkbox">{{ checked }}</label>1 `6 Z" j( I" B7 N8 S
  5.    
    ) K5 }& z/ C) [8 q5 l
  6.   <p>多个复选框:</p>
    $ s! V7 B% n- E1 v2 {2 Q
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    6 [- n+ M& I5 [' ^% e: e
  8.   <label for="runoob">Runoob</label>: F' Y9 B2 d4 e6 J4 E& R+ j; D
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">, }+ o8 I% d+ k0 F5 V, j3 C& V
  10.   <label for="google">Google</label>: u  _' o; Q# U) f% T
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">- l, P$ h  U& ~/ [3 h; {) x
  12.   <label for="taobao">taobao</label>( _2 Y4 P& M2 Q$ A. k
  13.   <br>* Y% K4 B+ `' X+ k2 y5 v
  14.   <span>选择的值为: {{ checkedNames }}</span>
    # h9 A: T+ g5 E9 v# ]
  15. </div>8 g0 G: w! i% Z  I. P8 U4 n

  16. ( ^: S* S9 }' P4 H" f9 m
  17. <script>
    9 T' B5 `) @1 Z4 @% ]! `
  18. new Vue({) f8 i2 v8 H. y' N
  19.   el: '#app',: L0 F" {3 ~1 m- z  q# k
  20.   data: {7 b0 B" T/ o5 ]* X/ c- x/ @4 L$ s
  21.     checked : false,) s  V# Q; |4 X. B- d5 d, p3 [
  22.     checkedNames: []$ b7 L8 L/ M2 C
  23.   }
    , G" p3 l1 B1 ?0 L- d
  24. })8 c! v1 c) R. b, e
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
) Y  _! a2 w( {- y
  1. <div id="app">. H2 j4 Q/ C6 W  r4 f
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    % |' U8 r+ O0 n. n. o
  3.   <label for="runoob">Runoob</label>1 t. ?& J9 P- g, q# E, M+ G
  4.   <br>
    & f/ o; T% y! I- d, }
  5.   <input type="radio" id="google" value="Google" v-model="picked">& V6 G, j3 T. t, p4 G8 E. q6 R- P
  6.   <label for="google">Google</label>1 ^9 C7 j+ F' C- c
  7.   <br>6 I, [2 n' j  {9 U8 y" q
  8.   <span>选中值为: {{ picked }}</span>/ w+ y& S8 r+ X6 J' Z& c
  9. </div>
    ! ^6 |/ p& Y- i- R) I( I6 b# S. P* ?
  10. 7 W$ D* v/ m! A6 ?7 c9 l
  11. <script>6 a6 g; `7 K+ I/ C0 s3 E: d
  12. new Vue({; m7 n. u' [5 _# N5 }: U" _! i6 n& h
  13.   el: '#app',, Y4 i* E; ~$ C0 z
  14.   data: {, l# d) D: R2 v* C4 m
  15.     picked : 'Runoob'- K& A7 Q: U4 r1 n' Q* u5 M
  16.   }
    ) {( c2 S8 V/ ]7 K$ F
  17. })
    # M/ u- H; b  E7 G2 l
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select: w# ^, x2 f% x( e# ]" X2 v5 Q
  1. <div id="app">
    2 y# ~2 P4 Z( o0 T( X; O: G
  2.   <select v-model="selected" name="fruit">
    % Y- o! @4 o9 B
  3.     <option value="">选择一个网站</option>* z! ]7 G% ~) x( S* g: g9 R
  4.     <option value="www.runoob.com">Runoob</option>
    ( u  C5 x2 ~! k3 L
  5.     <option value="www.google.com">Google</option>5 y7 S0 s: ~6 `. Y2 }, s
  6.   </select>, U. J) e: T; y3 L4 _0 I9 ]

  7.   z( e: S$ P5 e
  8.   <div id="output">
    0 ?2 h1 `/ B2 `5 Z; d. {
  9.       选择的网站是: {{selected}}
    / h9 D- C- h. X) n6 J
  10.   </div>
    & b5 j; j3 e& \
  11. </div>1 H# {' _& x  F# y' C7 p

  12. + y" c8 e! A! o# S- P( H
  13. <script>
    # Q8 j4 f/ G  Q9 ~1 _, w( b* E* b
  14. new Vue({
    3 I+ ]% k+ ^( A! F' g9 V
  15.   el: '#app',
    # U$ Q( ]7 u' P
  16.   data: {) x5 V* A& x; {4 \
  17.     selected: ''
    9 t, z0 ^$ ?0 q( s+ Q6 `9 b) E+ M
  18.   }. T/ v5 I) v$ {, S1 y
  19. })
    ; v: B! |, a8 \( K
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->; [4 r% u$ ]2 m" j
  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({
    * T. @. K' g2 B5 U& H
  2.     el: '#app',
    ! }+ Y+ n0 X6 b  G
  3.     data: {3 e# g8 c0 m+ h& M2 S  m% n+ |# ~
  4.         checked: false,
    2 E7 K, ^9 [  y" d+ `
  5.         checkedNames: [],/ }# p7 U; b- }4 j( @' E
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    # t' p/ j" T* x1 _! P+ h  A
  7.     },0 ?$ g0 m5 H  B& ]  L
  8.     methods: {
    & {) X+ ?0 c# L: |) K# o8 A- H- \
  9.         changeAllChecked: function() {$ b& \/ v$ v- t: ~
  10.             if (this.checked) {9 b/ f! p! F$ l  d! N
  11.                 this.checkedNames = this.checkedArr
    7 z$ b- m+ Q( p
  12.             } else {
    . O$ j# q& Z& ]' a( [/ L
  13.                 this.checkedNames = []
    : a8 ^' \: K# p0 b$ Y( @
  14.             }
    7 ?* {0 W  l5 C, W- O
  15.         }6 B" m6 F* a/ F
  16.     },
    7 F) D" ^  G; J+ ?9 g, `; A7 e
  17.     watch: {
    4 O+ f" I% t$ J7 K! G, W
  18.         "checkedNames": function() {) x6 Z: D: V+ e9 ]7 o* J! s8 [
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    3 L6 [) W& z7 d6 X; {/ S3 ?! e2 |
  20.                 this.checked = true
    - m+ A1 Q0 h, q( I
  21.             } else {
    * U  @8 G5 ]# X6 r
  22.                 this.checked = false
    1 W0 b, l$ o$ k5 @2 w
  23.             }: {6 I3 e6 A6 L* ?
  24.         }: x$ d) R! N) Q% K. x4 R$ E" I6 Q9 ^" x
  25.     }8 l' y6 S( }) d+ v: V" _
  26. })
复制代码

2 ?3 @" E( {$ i# A; `7 u3 W3 h1 u; |! k+ U$ U% v$ l8 H, B2 S

. t- J. R! K/ u) }' F, ~, C
' R) `( |: }$ E
# I; S3 B; p9 f& {
+ ]- z0 l# H: j0 ]4 T6 n8 D8 B  x# ?  D9 P( k
0 j, q: [1 \$ \4 s+ |+ O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 16:00 , Processed in 0.140029 second(s), 32 queries .

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