|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 7 g* S/ X0 j$ \+ I
- <div id="app">
3 \ \! c' [! u$ }& M - <p>input 元素:</p>! i( e3 v$ O9 C9 F( m% [
- <input v-model="message" placeholder="编辑我……">; u. h" ? N* j r$ W
- <p>消息是: {{ message }}</p>3 ^, y; q+ ^7 u0 i% U
-
. s* P; N) {" _- i7 U - <p>textarea 元素:</p> t6 J0 L$ P8 H
- <p style="white-space: pre">{{ message2 }}</p>
3 z, M& s6 G+ f - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
) x# C) R6 h/ K* {( s6 Z- U. R - </div>; q3 A, V1 g0 @; p! s
- 6 r0 e9 M$ @! W3 G+ f
- <script>3 T2 a! R) k, R+ G* { z( |& K8 v
- new Vue({3 S. ?9 X$ c ]
- el: '#app',' [, }9 D6 G0 Q' g$ |3 ^* b! X
- data: {9 w/ t, p% i% g, v; a* V
- message: 'Runoob',
" ~2 N* r# q! X4 p& U - message2: '菜鸟教程\r\nhttp://www.runoob.com'5 @" Z& g0 \( P; U$ I+ ?. a
- }+ ]: a' ^/ V* e7 ~" w5 @& {
- })
6 U; H' J0 p) G% r! \$ X8 ]9 y - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: * e9 e- |9 `# f% P- B* @
- <div id="app">
- w6 o, K5 @9 e0 b$ J - <p>单个复选框:</p>+ P! D# K1 F* a
- <input type="checkbox" id="checkbox" v-model="checked">
4 @. b. b7 g1 T% K. z3 ^ - <label for="checkbox">{{ checked }}</label> J+ h/ i! Z' D' u( [
-
- f: u( [& B: `7 Z$ C _ - <p>多个复选框:</p>1 R6 o. O0 p& d
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">9 X) {( P* L& z/ \
- <label for="runoob">Runoob</label>
/ V: g* u" \4 {0 m4 l - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
$ w; S2 b: ?; c K$ |7 \6 E8 I - <label for="google">Google</label>
( X( a# m) h; W - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">) \: k* v5 H# D, {% ~. g- J5 w& I
- <label for="taobao">taobao</label>. M" ~. }0 n2 c, h# F1 F1 p3 u
- <br>% {) f" `+ p; x5 E
- <span>选择的值为: {{ checkedNames }}</span>
I: \, }( i# q, A' p$ K - </div>- f% h/ q) r9 B) |
- . R) R% o( {1 ^! l& U9 y
- <script>2 i8 v9 s+ c, R) y4 m7 c. I
- new Vue({2 K4 p. ^: v3 ~) d: `* M
- el: '#app',
: o& G7 x. a+ ~ - data: {
- g/ o3 _, T O - checked : false,5 t7 n0 I& x- [9 C" G
- checkedNames: [] y5 Z! ~. d" t+ I, n: }% V8 E
- }. S/ f' K% L' p" W8 @
- })
3 |, S$ U, ~$ _1 C& g - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
: P' g% U: g/ @9 j- <div id="app">6 Z+ {# `: j8 S6 O0 L
- <input type="radio" id="runoob" value="Runoob" v-model="picked">8 h: j* Y( x2 |+ ~7 |6 e
- <label for="runoob">Runoob</label>
i/ C* a% X$ T4 q5 h& W+ m - <br> I3 \8 ]0 M3 J+ E: B3 B) Z
- <input type="radio" id="google" value="Google" v-model="picked">/ T2 L/ P' `' [: ]! N9 u0 k) K
- <label for="google">Google</label>
; g2 f4 W$ i/ H: t c: }0 G. Z/ M - <br>
2 h5 t, D: P$ ?( b" u+ t - <span>选中值为: {{ picked }}</span>
- h% j2 Y) ?& E( k6 c' |8 {4 U - </div>
0 Z6 Y7 z8 h- A/ y: Q -
& d8 ?; `" F& v0 C1 l - <script>
5 i1 Q/ A1 d7 Q3 D: Y: x8 V( o4 k - new Vue({
/ S+ [7 C9 [3 W6 w5 L9 F, k* i1 y - el: '#app', ^2 e+ J" |7 t# j/ d
- data: {
) t7 l: ]# \6 E* D% f - picked : 'Runoob'; y1 T$ W9 r5 `8 ]2 T! f/ z# @& i
- }
( A: ^1 Y( H3 Z5 G m# n/ `3 C - })$ v- f, o) @9 l; t4 p$ D
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
1 c4 Y G5 [. C9 f- <div id="app">
% T4 ]6 `& y( O e2 W - <select v-model="selected" name="fruit">
0 c ]) M6 T# c+ ?& l* `1 @# M. Z- ]6 A - <option value="">选择一个网站</option>4 C' n* @. u( i! l6 Z( W( s* c
- <option value="www.runoob.com">Runoob</option>3 n/ }# K# c" A$ s" X# `
- <option value="www.google.com">Google</option>1 K" d/ w2 O: n% H* x
- </select>- x) B. J9 S: b) o) W3 D: U, l* C* c
-
! j/ d& i8 M% N6 y% h ? - <div id="output">! P8 \4 ~4 U# `9 y& F% n/ K
- 选择的网站是: {{selected}}
; U- H# [1 T% I* J+ F7 w - </div>9 M/ F6 I( F- S' w. E7 W8 ?# J
- </div>
8 A5 p/ k* Q2 @ -
5 C& J- D# w, Z5 d) o - <script>
4 q0 A$ D7 f) r. ?* E - new Vue({* {8 D9 J6 b R" W* h: n) E9 w0 N
- el: '#app',3 q# A% h, s2 [( l4 s* L5 x
- data: {
- |& U/ E5 u, b( A5 c - selected: '' 5 s/ T+ I$ }$ z6 y
- }
! r% ?6 l8 Q% C8 S1 c; J$ B( K - })
% k- P6 q5 A: m) Z - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
( s3 [, O1 F0 W/ T0 j - <input v-model.lazy="msg" >
复制代码 .number如果想自动将用户的输入值转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值: - <input v-model.number="age" type="number">
复制代码这通常很有用,因为在 type="number" 时 HTML 中输入的值也总是会返回字符串类型。 .trim如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入: - <input v-model.trim="msg">
复制代码全选与取消全选 - new Vue({8 v6 W1 ]& j6 t I+ A+ b+ K
- el: '#app',
$ K- x' j# i) C" Y- c# g - data: {# a# X. j7 O7 H
- checked: false,6 {: h; V9 D. n r4 D
- checkedNames: [],
8 J8 _8 @7 p3 M, I: G9 {/ b* v$ s - checkedArr: ["Runoob", "Taobao", "Google"]6 C) G7 F( o8 M
- },* }) {* [ A Q. t+ Y$ e$ K
- methods: {5 Z" J, E. J! B9 q/ w" O4 M
- changeAllChecked: function() {
7 [+ S B4 N. k4 f1 S9 Y5 i - if (this.checked) {
1 g8 m. Q! j! C7 G0 y - this.checkedNames = this.checkedArr8 `" B0 a& M1 H7 X
- } else {
: p) K6 ?0 X; [& b& o - this.checkedNames = []* {( m! |' C1 l( {6 G" G
- }% P0 f9 d1 c* Q+ Z- C$ x
- }
6 D# }# q a0 d2 ^: s* x - },( z2 z. p+ Z2 ]& l" R2 q
- watch: { F3 u9 m" t& N' h* ~" x0 }
- "checkedNames": function() {2 }& `: y9 _. F1 {% y
- if (this.checkedNames.length == this.checkedArr.length) {- I( F6 `3 b; d& U5 C! }0 R) A
- this.checked = true* N" E+ T) k/ \( z7 ^7 i1 T: t
- } else {
9 u: w/ d3 n6 b( O - this.checked = false; X. s6 ]/ A" K! P
- }
/ a% P4 b. I& @' F0 ~ k3 e, J - }! [) ^( f6 ?% ]# I1 M# A0 _+ U
- }
8 m* p; A$ k' t( ~& x5 J, }( w4 P - })
复制代码
- k( L+ H) I0 P. i9 X% s8 u6 h' w j. |9 p" x0 P9 k: `. l
- @( h$ Z- P4 s! }7 m& B5 ~1 R; B6 x: l8 u; H, g+ k: F% r
# I- ~+ q q' B P ~' i0 \4 Z" z4 _' L' ^4 T' J# W9 m
8 K% y* j4 H* x
: I1 J, a$ Z/ N! }8 w
|