这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: : f9 _! f1 g; F
- <div id="app">! p) ^$ x% @6 C0 a. L, V
- <p>input 元素:</p>
) q6 C0 H7 A( V7 Z/ ` - <input v-model="message" placeholder="编辑我……">4 n& E% e, K p; I2 F9 L9 F; T6 m
- <p>消息是: {{ message }}</p>1 Y4 x$ |5 ], b7 V
- - @3 y. T) e6 U) |" h
- <p>textarea 元素:</p>
/ [* \$ V' `1 ~% @) W) |3 B3 Z/ k - <p style="white-space: pre">{{ message2 }}</p>
$ ^( _, k' | ^ - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
\) P$ G9 ?, ]1 L - </div>5 y" W6 ^' u Y1 T$ K0 h. ?
-
" W# J! ^( R: r; ~4 v - <script>4 }2 F4 d3 w/ X8 o3 u2 D9 i) E
- new Vue({3 r& x+ l- ]( l7 ?9 q" m
- el: '#app',
; d+ a" |4 q0 M3 b! O% Q - data: {
; K' U: b( [$ A0 h7 l; L - message: 'Runoob',
+ Z. q7 U: v% ^: L* ^+ _ - message2: '菜鸟教程\r\nhttp://www.runoob.com'
% S' d3 N% |( a$ T5 V- @ - }
6 T/ O9 ?1 g1 h. o1 V$ t - })! w4 j4 [$ k! \5 S9 R0 r
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: * @7 p% P1 l4 N
- <div id="app">3 F. W1 h: N+ C% l1 _+ [
- <p>单个复选框:</p>
: G) D4 }. S* ]8 E- s( l0 y0 Z: E# M, V - <input type="checkbox" id="checkbox" v-model="checked">
4 }, i8 @$ U F4 i1 S% C. M - <label for="checkbox">{{ checked }}</label>4 d3 B, ?+ C+ Z& V1 u
- & m; X$ p# Z# ^" R6 T
- <p>多个复选框:</p>
m! D+ r6 D8 s1 }" F) Q - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
: j8 Z& E$ w9 y) [, ]% E - <label for="runoob">Runoob</label>; B" t4 j: l4 a8 r2 e
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">+ H3 k7 k9 b5 M0 M* m
- <label for="google">Google</label>3 D/ h) u5 y" l8 g3 u, [
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
& p4 S0 f- y, t - <label for="taobao">taobao</label>, U! ~% B. W& B! t1 c' z) h K
- <br>
5 v* {+ o S$ Z! s. {4 W7 a - <span>选择的值为: {{ checkedNames }}</span>
" b: X' `- a! d - </div>) w1 V* V! r9 \9 ~8 R! u! n5 G5 F& ^
- ! V: U& X) M4 d
- <script>
8 H! c7 z0 e$ \& Q - new Vue({; E8 I5 _$ L N/ X; h7 n5 m4 K
- el: '#app',
# n! ~, C/ c- n - data: {$ m& n, a8 c1 d
- checked : false,
. ]2 q! ]2 N$ | - checkedNames: []: @& G: k% y9 z5 a0 m: @
- }4 ?- s m# v9 [2 _5 U- J
- }); I( N/ {0 Z4 g. y5 \! w `
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
4 V r- _3 i# r: M- <div id="app">0 j4 o' P' f @
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
6 V0 M1 I1 K; [ - <label for="runoob">Runoob</label>& { F x" l3 Z( v8 a
- <br>
! `3 Z4 @8 i- u/ [% o$ w; D6 q8 a1 q - <input type="radio" id="google" value="Google" v-model="picked">
( ?; M& E& Q" f# ~' ~/ [ - <label for="google">Google</label>3 U0 ^) E8 h' d' j# N
- <br>0 T$ w4 _$ t7 v5 z9 f
- <span>选中值为: {{ picked }}</span>. O! m# q L% k1 L; q, ~0 ~
- </div>
' l% }4 d7 q7 F E% \ - & Q. R( |; b4 @
- <script>% t2 O4 _* l5 p3 ^
- new Vue({5 n7 I( N+ g4 F
- el: '#app',9 u# z" r& X; h& W! g; \
- data: {3 t$ ]* N% W6 N3 r# c
- picked : 'Runoob'% ?3 D4 x; J+ {
- }& k5 q4 a( I2 L7 I* f1 }. ?8 j
- })
- Z0 p: w: \% h2 |, _ - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
3 X% F; Y5 l; f- <div id="app">& M+ A. [& d% K, _1 t1 g4 b/ C
- <select v-model="selected" name="fruit">
5 U4 e, U6 h7 C8 B) Y# D - <option value="">选择一个网站</option>) z) i( b' i: l1 _' E9 p
- <option value="www.runoob.com">Runoob</option>* ?0 N+ }( {7 u5 G6 K- \. Q; v
- <option value="www.google.com">Google</option>
5 }' R5 j2 p8 N# p; c- m - </select>
% x$ d1 @7 M8 J# O7 D( y B7 q B - 6 d% K, ~1 W# a3 H& \( g- S
- <div id="output">/ S. X$ a5 o, h7 y' ?6 m
- 选择的网站是: {{selected}}
! Z, y( x1 K0 U* b& W - </div>' H' Y2 B# S; ?$ O% x
- </div>
7 Q* h! z" ?6 p+ z- ? -
. D& ?7 V, q$ o3 ^0 c - <script>: Z0 x9 R; M& X5 }
- new Vue({* n" c( A2 x9 z- N
- el: '#app',
5 ]% q, N( M7 }+ p J, u - data: {# S, O6 Q: M# {. ], \2 A
- selected: '' # I. {$ I& F: i. L G/ ^, a
- }
7 r3 y( P N& n P - })
' W ]3 A8 D. T7 S% j3 q* g; B, g - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
; K3 i) f% A" u- @( D - <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({
5 j1 @5 l# {( M9 @, x - el: '#app',
9 ^/ W) p8 N( K - data: {
0 h4 ]) i1 ?* G6 ` T) d# p" y0 q - checked: false,
6 w9 n$ s, e3 d8 P - checkedNames: [],
+ H/ z2 ?' b+ }% [# p+ S1 C - checkedArr: ["Runoob", "Taobao", "Google"]
* K' p O/ H7 Z8 ~- a" a2 P* I1 U1 ? - },
" G+ y8 z) U# s* h9 F( a - methods: {
y7 J* S7 Y/ V @( M - changeAllChecked: function() {8 A- [, A) v5 Q. l9 E, ~+ J
- if (this.checked) {
$ N! D% X1 `8 ?& _ - this.checkedNames = this.checkedArr
$ n- ^5 j5 n: ` - } else {; d5 q) V j% P, @/ b7 \4 m- Y
- this.checkedNames = []
# X6 c, b, C8 u - }) D" b2 ?$ E1 N& W! t
- }- d: @- k+ P7 i3 q3 ~3 c0 K) K
- },6 ]! {$ @3 X/ v) R- Q0 F8 F
- watch: {9 W! U$ k9 p$ q/ U; |9 S9 y
- "checkedNames": function() {3 p" j" [& ]! k1 B* A( p. z
- if (this.checkedNames.length == this.checkedArr.length) {
, o9 Y0 f. a* p; {- P5 ?" P; ^/ { - this.checked = true
7 S; {7 Z# L0 A1 C1 { - } else {
; c& S& _- ], h - this.checked = false* u* I- L: g- e# W7 P7 w$ N
- }- N, B- u8 y5 g1 S
- }% r6 n( G# Q/ p5 N+ H
- }
, |' Z3 k2 o! R+ u. _) K2 K( n - })
复制代码 1 d2 F0 v( S! c. d+ G ]
7 M! u4 g( ~4 l$ m D- C9 f6 m( b/ P6 O
3 x- E- [1 X8 T3 @
& N: q! d6 Q+ [3 w1 Z. t$ q+ q$ L6 C; k) O \ y3 ^4 g
+ _$ I9 L$ n- Y# `: L; W2 c K; @# Z2 p. p1 V
|