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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

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

, j: R0 ?# h9 y
  1. <div id="app">* m" v4 J7 N" A7 M
  2.   <p>input 元素:</p>
    ( a( T  i, G3 G5 Y: V
  3.   <input v-model="message" placeholder="编辑我……">
    5 T+ X; ]5 I* a! v7 r  b" ]
  4.   <p>消息是: {{ message }}</p>
    & ]* x; _: K# ^  `) [
  5.     4 \6 r+ h' c  ?% J% e  c
  6.   <p>textarea 元素:</p>% _5 {6 [% L5 I) _* y' @
  7.   <p style="white-space: pre">{{ message2 }}</p>
    / V( U: @" y" }* W  P; ]2 U- V# w
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>% O  a( [; R( k1 G4 h9 V, M
  9. </div>
    * }- b2 H# X2 c; O, b8 ]7 q
  10. 8 a" P( u9 p* W' L
  11. <script>( l9 C$ \) P5 O; C* p
  12. new Vue({
    # Z3 x2 p3 Z' y+ {
  13.   el: '#app',1 i2 P  w- U- @: j, A5 b
  14.   data: {
    1 E! _+ ]3 a8 u! s4 n7 Z( c9 c
  15.     message: 'Runoob',2 G6 Y5 ], v- h! J( q" X
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    8 p. }/ x9 v& `5 Z: f2 G
  17.   }
    0 E9 |( `- w$ W/ P: g$ i4 `* i
  18. }): b5 w! @) p' d" _7 m- d( y# D
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
, y! @+ C  H' ^% o
  1. <div id="app">
    6 D! J3 G6 r$ g/ V/ e6 I! |
  2.   <p>单个复选框:</p>
    2 U! s/ ]8 K. c' _: a
  3.   <input type="checkbox" id="checkbox" v-model="checked">7 y0 Y: ^: ?7 C( m2 o2 u9 w( r
  4.   <label for="checkbox">{{ checked }}</label>) j, E* |# O/ k& p/ y
  5.    
    7 C9 }3 f$ d6 o% F- D/ H: O
  6.   <p>多个复选框:</p>9 i0 |2 c: q% d6 @- n# E
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">4 v* v) S# `8 ?" _) s8 s: R
  8.   <label for="runoob">Runoob</label>9 ]& g, G- d4 {; v7 {
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">1 \) f& f. w8 b$ h. P
  10.   <label for="google">Google</label>$ W* M$ ]. i% i- p9 A7 F& N
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    / D& E0 k6 @- q- x3 e, Y
  12.   <label for="taobao">taobao</label>/ k& A* `2 M; K* b5 P) U
  13.   <br>% q# `7 _7 [* C0 ]) O- e1 C
  14.   <span>选择的值为: {{ checkedNames }}</span>
    . M) a: I! u1 @' `
  15. </div>  C( F1 t+ L3 D  R* F7 a- ]

  16. ' v( v8 e! m  @1 t
  17. <script>
    $ ^- W. B! Y! e9 w6 L" b
  18. new Vue({3 [6 z6 V9 q( d: I. ^8 t
  19.   el: '#app',
    ; `6 s8 B0 B+ b% E+ M
  20.   data: {( ?; G4 e7 t4 [2 [6 ?
  21.     checked : false,
    + w' ^: c! B, x# R2 T/ a  e1 l$ F4 R2 O
  22.     checkedNames: []
      ^7 j4 p& |* E7 d  Z& h2 ~' v
  23.   }2 S0 H. o1 e, P* R
  24. })/ d5 i% h! Q, t% `; U9 E- m4 C
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮3 f# J4 z7 g& h$ d- z! r: r
  1. <div id="app"># X8 _- \# U5 a0 y1 S$ u
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    ) }3 V- X- |* q* y1 j
  3.   <label for="runoob">Runoob</label>8 B$ d! c, [; l0 L+ }
  4.   <br>
    : Y3 x$ V- i% |0 ]8 c6 _% E: u4 j
  5.   <input type="radio" id="google" value="Google" v-model="picked">: i0 x' ~. S; m
  6.   <label for="google">Google</label>7 N' D7 h" Q: H
  7.   <br>2 v5 P8 S, ~3 l& o
  8.   <span>选中值为: {{ picked }}</span>
    ) S) G' X  t8 @2 G  \2 v
  9. </div>
    ' E0 f- O7 y: ~: }8 P
  10. ' K3 o& H& i+ g! {
  11. <script>
    , k" p5 `( o; S1 o
  12. new Vue({
    ' e" w1 z; J; r+ u; }1 Q+ m
  13.   el: '#app',
    * N3 M5 z3 g( p
  14.   data: {% z  f4 p9 ?) Q1 T) R
  15.     picked : 'Runoob'
    * m2 `. p+ e# Z4 U7 `9 I9 {
  16.   }, e8 u9 M6 x) F! n
  17. })
    9 m" ^5 H6 S2 A2 n1 e
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select* c, z2 W4 x: P4 P$ V& N1 h
  1. <div id="app">
    9 m% I* t% R& w7 m- T' _
  2.   <select v-model="selected" name="fruit">
    5 b' I- l1 L2 o9 _2 G7 h& x# U9 p
  3.     <option value="">选择一个网站</option>* J  }7 m2 j" S! M
  4.     <option value="www.runoob.com">Runoob</option>
    - l% C& y9 V8 _8 q) g2 s( o
  5.     <option value="www.google.com">Google</option>1 W4 ?$ n3 \3 s/ _* U
  6.   </select>
    ( W. j4 T; h( |2 o. j: o% b% b

  7. : Q4 Q: l  ~/ ~( \1 C9 _
  8.   <div id="output">
    6 F8 \4 N3 B' N! {
  9.       选择的网站是: {{selected}}
    ) M6 \9 D' ~1 {. s5 p
  10.   </div>
    7 [/ s' J0 ?% w9 M
  11. </div>
    ; r9 |" X6 ^! M5 d
  12. 4 K: c/ {* n' t
  13. <script>
    / E' K  B1 W. o3 M& |4 z: P
  14. new Vue({
    ' n( y1 z# Y' \$ Z5 m1 v
  15.   el: '#app',
    . _# G: d7 E/ v6 G+ _/ b8 |7 s
  16.   data: {( h6 R1 s% ~- A+ x
  17.     selected: ''
    & N) [' t( E- t; L
  18.   }! @! ?( i; `/ x& H5 W
  19. })
      n! s5 n) ?+ c: g& Q: t
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->6 W2 a" T2 e2 [- U. T  `" 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({6 m* C* \7 X/ _! k: y
  2.     el: '#app'," [) |& ?+ v' s8 z) C
  3.     data: {& H8 m) H" a* ^* s$ t
  4.         checked: false,) x' i+ S# a2 O" l: @4 a
  5.         checkedNames: []," m/ ~0 M" O- {/ D$ e8 ~) G7 N; Q
  6.         checkedArr: ["Runoob", "Taobao", "Google"]* D/ a  A/ M, E0 n" U' e" u
  7.     },
    , g- Q, ^" w; U( g
  8.     methods: {
      T" ]& i& k" ?
  9.         changeAllChecked: function() {
    . ^6 ^: s; A- F
  10.             if (this.checked) {/ b- W& c/ s% }# j5 Q" m2 V
  11.                 this.checkedNames = this.checkedArr
    ; q/ q3 I6 C6 z2 ?
  12.             } else {* C+ {0 J  L/ y" y$ L/ h5 V
  13.                 this.checkedNames = []
    : L4 _! x& s: d/ B* y
  14.             }0 l+ I9 x6 V6 w5 C* p; w/ @
  15.         }
    6 G9 \+ b0 b+ S
  16.     },
    2 ]8 {9 c& R( U2 M" A% Y' T
  17.     watch: {8 r% p3 V; }9 x" c# `
  18.         "checkedNames": function() {/ y4 l) E9 |- p2 O  ~6 a5 k% _
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    $ P. q  Z# z$ ^1 k+ L
  20.                 this.checked = true
    & {. l3 v' W5 h
  21.             } else {! {/ d( j0 C* N" ]. W+ Y$ W
  22.                 this.checked = false
    # P: t4 a6 \6 O7 S; ]
  23.             }! @9 n) y% J4 ~+ ]
  24.         }
    7 B% e+ ?. C+ Z& a9 ^7 ~5 L
  25.     }
    3 h( F2 F% ]0 Y) N% s/ B
  26. })
复制代码

$ f8 ^9 K/ c; |
7 l0 Z4 g# R- g" ]9 E6 E, Y: G9 G+ n. _3 |" a5 F
$ `) w- I5 X- a( _& r6 g# i

6 R$ [! |+ ^2 Y! z8 L* P: l+ h$ L( O9 X6 \2 ^- c9 [7 c
6 x' h  t4 ]  a" `9 R3 C- {; X
6 a. G( Y% T6 q( M" G, B' n' U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 11:58 , Processed in 0.141647 second(s), 22 queries .

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