cncml手绘网

标题: Vue.js 表单 [打印本页]

作者: admin    时间: 2018-7-4 11:22
标题: Vue.js 表单
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
9 J3 g6 z' F. @1 X  M# u) @3 o2 N* b
  1. <div id="app">
    ; K  c! _! T5 q9 _, \
  2.   <p>input 元素:</p>6 E0 Q: J7 o5 X8 f6 b6 t# D' _
  3.   <input v-model="message" placeholder="编辑我……">' z5 y! P. v4 {& x" B; z, ]
  4.   <p>消息是: {{ message }}</p>" V+ J1 Q; u; Q( K6 t
  5.    
    ) x# m" C. x9 i/ [2 L/ ?$ Z* D
  6.   <p>textarea 元素:</p>
    * e5 p5 l' k( Z- w
  7.   <p style="white-space: pre">{{ message2 }}</p>
    8 ^) n5 c; L* B, R- L) R! r* L
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>3 z$ m' s: q% N6 Y9 Q4 C6 K
  9. </div>
    ; @1 m; L; U! d2 F' `1 V- D. B
  10. 7 D* j: x, `8 c; ]8 H' B# ?3 d
  11. <script>1 |) r" L' R7 I/ v
  12. new Vue({* D7 F% _9 U- _" L3 o1 i) I9 D+ o* w
  13.   el: '#app',
    5 T  V$ g/ C  f5 Q6 M
  14.   data: {
    7 ?" R1 G6 e: t! P" g! W) T
  15.     message: 'Runoob',
    3 u0 B" W$ D  }
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'7 s% `7 w8 i  H0 h# g! o% u
  17.   }
    / s; N; T4 e) w" O& S' l7 ?
  18. })
    1 _$ h2 G, y. u5 f( V2 K+ \
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

+ A" f+ y1 \+ c( v8 S
  1. <div id="app">( A  f( e- @( H/ y
  2.   <p>单个复选框:</p>
    $ j/ c, d- ~' _+ r8 Z3 e
  3.   <input type="checkbox" id="checkbox" v-model="checked">/ H1 ]* [- v- W2 F% H0 F. y
  4.   <label for="checkbox">{{ checked }}</label>6 C& J5 g7 J: S' V' L) a
  5.     ; T: N. b% m4 W8 ~
  6.   <p>多个复选框:</p>
    , G& P" p5 D  ^+ X' \: E
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">; K5 x/ u& Z, I. _0 Z" t+ b- Y
  8.   <label for="runoob">Runoob</label>
    2 ?% r4 I1 S- G, A7 R$ ], c
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    . ^& U9 L6 h( A: ]% F4 u4 a
  10.   <label for="google">Google</label>& H5 U8 k; z3 i; F# J
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    ' b8 ^2 g$ y3 E1 t* c
  12.   <label for="taobao">taobao</label>3 {) z; c! m  w* u3 [( Y3 v
  13.   <br>/ y  W& J, Z9 s$ `
  14.   <span>选择的值为: {{ checkedNames }}</span>$ Q2 j- d, B/ Z* J
  15. </div>" W. u8 c) Z! E$ o7 o+ ^, a

  16. 3 o7 b$ @" e; z' k5 T" C0 l
  17. <script>$ Q/ ^  `' i' i- V. p
  18. new Vue({
    $ w( _. }# p* u8 U1 O3 y
  19.   el: '#app',* e2 S& F4 n3 u# d+ M4 l
  20.   data: {
    + {) D  g5 P+ J. Q% E" b
  21.     checked : false,' B6 W1 ~0 _$ m6 w2 F) A, Y5 v
  22.     checkedNames: []
    ) g# O" x* m4 j, x: W2 U" A* E' ]
  23.   }$ }! u$ P8 A6 j
  24. })$ i  K- }' H5 A1 x
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮5 S3 w! Q/ A0 X+ S' M
  1. <div id="app">
    : D5 l' ?' R! E% `" i
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">4 o9 }6 {6 l& H; f0 H
  3.   <label for="runoob">Runoob</label>
    7 \2 j8 ?0 x% c% [
  4.   <br>
    $ }0 L: q6 `& A4 L. n
  5.   <input type="radio" id="google" value="Google" v-model="picked">! k2 C; t/ D  Q
  6.   <label for="google">Google</label>" B1 V# w8 Z1 L2 M1 P0 }; D7 X- R
  7.   <br>3 ]9 ~+ Z- q. l0 D( y# j; q) K( o
  8.   <span>选中值为: {{ picked }}</span>. e0 N, [* S1 `2 x% p1 j' z
  9. </div>2 S; y' M% y7 G: U6 [5 P* H; U
  10. 8 A' ^, @& C) C& y# b
  11. <script>2 S: X9 \$ E) K' X$ v5 r
  12. new Vue({
    % Y- W8 ~; \- b. E8 P
  13.   el: '#app',( V0 V) e) Y1 t/ a* j& z- b
  14.   data: {
    ) k! x5 U0 t' J
  15.     picked : 'Runoob'! {5 B$ R7 [# U% A8 L& t
  16.   }( A. k4 f" c; R% d/ i4 Y0 q' B
  17. })1 ^; l% S1 E' {, e' e" x0 ?
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
9 B. R3 q. E4 I$ @/ E7 M
  1. <div id="app">* i3 ]! O. w6 ]( _" q$ y% A
  2.   <select v-model="selected" name="fruit">+ [# D( r, @0 A' n( j1 v! B
  3.     <option value="">选择一个网站</option>
    8 z, g3 M: c3 l; ^" F+ A
  4.     <option value="www.runoob.com">Runoob</option>
    " `+ s0 c0 p1 o7 p4 ~
  5.     <option value="www.google.com">Google</option>
    : ?! O, ~" b. a0 f  g3 d# D8 E2 d2 D
  6.   </select>- e  W' S( a/ J5 W' c$ I& C
  7. . K3 X7 }# @2 Q2 z2 C! x* a
  8.   <div id="output">! M' i: W5 U1 r- K! E+ p
  9.       选择的网站是: {{selected}}
    ' d, V  N$ A+ ~8 o% D& B9 W7 d
  10.   </div>
    ( C/ x7 s! v& W8 g6 K' ~
  11. </div>; Y$ w' {3 T" S

  12. " G1 |; g$ \+ z+ |& i* q
  13. <script>
    ! z6 p3 X6 T; ?$ w) C1 o& `$ X7 `7 Y
  14. new Vue({( f# r7 Y& Q9 R; w. r
  15.   el: '#app',
    2 g; G3 ?6 B5 C1 ?; d* _, G
  16.   data: {
    7 G+ p0 [9 A0 V: D4 A  e# X0 X
  17.     selected: ''
    5 j. h/ Q) A# |- w
  18.   }  U. k6 V; ^" y( e/ f
  19. })0 d7 H4 N$ z. h% z1 l# W. O- P7 u
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->% ~; O! v# n; v' S
  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({( [* J1 p/ m  h) t7 F: u% D8 }
  2.     el: '#app',$ n+ P  {4 y' Y
  3.     data: {
    " ]3 N0 q8 k- ?2 X0 S
  4.         checked: false,9 f6 R5 f  N' t9 T' Y& j' j4 ]
  5.         checkedNames: [],
    7 b& R5 W6 s7 `0 G6 g0 ?, I
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    : t# S; v: [6 i2 X: h. D' g
  7.     },
    * C8 [& I5 I, D
  8.     methods: {( \% [! h6 U+ I
  9.         changeAllChecked: function() {
    " l5 a! q  T( v. ^8 Q
  10.             if (this.checked) {. d, x2 ?6 k, L$ s; y0 S6 h
  11.                 this.checkedNames = this.checkedArr
    % ?, ~: l+ w/ c5 N1 a! ]0 {$ B! f
  12.             } else {3 n7 J: Q, O( F: u* G; k) P9 M
  13.                 this.checkedNames = []# z4 x6 V3 K$ c. G  G9 w8 U
  14.             }
    4 U5 a; [5 p5 P! z" ~) {
  15.         }& S. X9 u  p8 L
  16.     },
    6 W- `. u3 r" f
  17.     watch: {8 r' v) Y/ S* G- ?
  18.         "checkedNames": function() {8 v. I* L" F/ _
  19.             if (this.checkedNames.length == this.checkedArr.length) {' B; x8 u, U3 o! k* U5 W/ F3 m
  20.                 this.checked = true
    / x; n; z5 C# Z# T1 \
  21.             } else {
    * ~9 @% B  J& k. w
  22.                 this.checked = false& M6 k4 ~/ U( o  j1 _0 }* g) A
  23.             }, K! V" |& E9 r7 v, T
  24.         }
    & Q4 p$ B* P' U( c' y$ ?
  25.     }
    $ ~4 |& O3 R. A0 [! H8 N
  26. })
复制代码

- A8 k0 e( L8 {! [5 N/ G
- Q9 u# ]+ p3 M5 W# X4 Q! i
) b% n2 x3 P  ~5 z2 e1 u: d: p% K
1 T: f1 J6 v$ M. [, V! j5 V
/ \, ?. C6 s4 {: y# ~3 V6 R

$ D& M+ C( t9 I2 e9 L
0 E5 d: @% a$ N6 A+ L




欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2