|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
6 c8 b$ l" Y( O3 V* |- <div id="app">
- v( j8 f6 `4 W: A/ K# W - <p>input 元素:</p>
+ j) Z0 w: W! i. E" F* y, ] - <input v-model="message" placeholder="编辑我……">
4 ?* a3 m" m$ H$ F Z: }' L - <p>消息是: {{ message }}</p>9 F( t9 t6 R+ E
- 2 Z: a, f. l7 g
- <p>textarea 元素:</p>
3 r" N" p) r! N9 t. w - <p style="white-space: pre">{{ message2 }}</p>: A, Y. P- W7 m
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea> D l8 }1 D% x [$ T0 f S% _
- </div>
" G9 I8 C! w* j' A! P# i - % d/ s" y$ I* s p ?
- <script>& ]. R) ^' P( t
- new Vue({8 E% T* _7 ^! c6 O. l9 }
- el: '#app',0 [% V3 R! {7 n
- data: {
: W3 P( w/ n/ q) F - message: 'Runoob',8 J7 k+ X2 }$ L' o; K+ W( e
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
! ]8 \# q, N! ` - }
+ o. H8 t+ }2 ~5 n2 G# N. P - })
/ B# O2 a# X" O' k ]3 j - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: ) U$ O, D( y# N0 c! f
- <div id="app">
, c- M3 q, e: ^) Y+ q' F - <p>单个复选框:</p>
$ ~ r; @" b' |# w! [ - <input type="checkbox" id="checkbox" v-model="checked">
$ V, w& O3 V6 _ - <label for="checkbox">{{ checked }}</label>
0 I0 J7 V2 I) U3 y# ~* h3 M* k - ! h; Y- b3 P9 U$ e% Q# c' A
- <p>多个复选框:</p>
9 @" N0 r" g% T - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
; {: r2 i. z+ S' |/ s8 ^1 \9 O6 e - <label for="runoob">Runoob</label> a& l. L. r6 i; j+ i( i0 P
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">9 j0 G# Z6 k- M) G
- <label for="google">Google</label>
) j0 C# g( b, Q* Z3 @ - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
) N. l# K# y6 S% o) O0 _ - <label for="taobao">taobao</label># P1 x, o" L+ @: T2 W: Q
- <br>3 B+ C" i: ?: N0 @- h- E5 Q; }
- <span>选择的值为: {{ checkedNames }}</span>0 ~4 u* ]! y+ E1 d2 p
- </div>
% O7 C; C: @% ]0 k: D - $ c6 G1 I5 ~& Y3 W4 `, ]
- <script>
( n8 Q8 h- u0 Q4 ~/ J - new Vue({
! B, L ]% x/ e' E, p# n - el: '#app',
8 H' I4 V! j5 X/ U7 K5 B - data: {$ r6 ]9 h8 L* ~4 h
- checked : false,/ E d% ]# W" \# t b/ D1 g$ W% b1 X
- checkedNames: []0 ]. Z# k' X, c" z3 E) J- t
- }
9 s R0 h; w4 y: O - })
: q; _; e: z) F: D ]& K - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
3 f" @$ J8 A& m# x3 j) f- <div id="app">+ \& Q5 r4 B0 w& a/ ]% M# W
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
# d5 F! N! m1 Y' p- e6 T - <label for="runoob">Runoob</label>
* b- ~! H1 I" C9 X - <br>8 @+ {( ~$ p: O4 l/ A
- <input type="radio" id="google" value="Google" v-model="picked">% q4 A% A9 Q7 I1 P" p
- <label for="google">Google</label>+ l! M7 V. M" K! I8 K7 x1 T
- <br>, u g$ ]0 C( G; t8 q9 i
- <span>选中值为: {{ picked }}</span>$ w/ o& v7 u+ T/ v4 v5 u
- </div>
* e- @4 s$ t! r8 d' B# W ]2 D - 3 q/ [- ]" X# y6 F7 |1 W
- <script>5 U! z1 f) s5 @
- new Vue({
( ?' V% c, _# V! z' R, t) i8 E- \0 j9 O - el: '#app',
# l2 w( t- v% T0 n# o, q; |3 } - data: {
; w' d7 s/ K7 T: Y0 S) P - picked : 'Runoob'2 V' j& o) q3 x' t7 P, G H
- }; L* g7 c. K/ ^1 g/ M" C. T
- })
- L. {2 L8 ^6 c$ k, G8 W - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
: n+ Z5 |+ a8 u: G0 C- <div id="app">
# Q {; S. Z7 s% I+ N/ Q: M - <select v-model="selected" name="fruit"> O! @: U( s% p3 R
- <option value="">选择一个网站</option>! q! R) ]$ W y
- <option value="www.runoob.com">Runoob</option>' Y6 ~ ]/ O# @- W% A6 w3 K
- <option value="www.google.com">Google</option>
' |+ \; K# J2 P2 h8 F) k - </select>
: f: C8 k1 \/ v/ g2 J9 L; F -
& S! i" T, [+ ?6 f: H - <div id="output">: t" G* f- }2 ~& `) E
- 选择的网站是: {{selected}}
0 b6 W" y# c% \6 d - </div>
0 ?3 j! f, n9 p' @. M0 O! P9 H: } - </div>0 ?$ `! |- `, A1 M
- ! d1 d5 t7 B0 o E$ R2 x& }3 K( d
- <script>! T4 W2 t5 `, m3 v! z
- new Vue({
2 f9 m G9 r2 H& G - el: '#app',
% I0 T: R6 ~9 z. [* H7 m! m - data: {
' S" o% b: V! S - selected: '' # j* W0 b/ j3 { O* C
- }$ ]' t5 d y R2 w6 d8 w
- })7 K9 M6 u: t4 Y* `; [
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->5 `2 b" ]0 x$ N$ `! V" c
- <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({; f5 w C4 ~) N0 `! O: w
- el: '#app',
- J! E; t4 h$ r: B, k - data: {; ?7 H) a/ Q v) ]( \& `" @
- checked: false,
1 E$ Y* W' T2 \+ N" P - checkedNames: [],
* k J3 `0 E3 n! A! P# { - checkedArr: ["Runoob", "Taobao", "Google"]/ d0 C6 m: N, _( T
- },
+ K; G) Y( Z3 e - methods: {6 a& U7 M) W* ]. Y9 X# h: k
- changeAllChecked: function() {
9 X! }) ]1 F& @ a - if (this.checked) {
. l7 [! q- d% o! p7 y$ Q3 ] - this.checkedNames = this.checkedArr
m& e1 S, |7 q9 R+ t( f& [5 D - } else {
# V$ V4 s. h* I9 B; z7 S0 e - this.checkedNames = []; g' E' |; q! H7 ]
- }
4 x' k7 E0 g( T+ y, Z - }
8 W9 I0 I, W( Z; b# o$ B - },
( ]4 }0 K$ Y# v3 n - watch: {
* H/ C1 q+ {/ K& R: e - "checkedNames": function() {3 R& }1 ^5 q+ e8 H. ^
- if (this.checkedNames.length == this.checkedArr.length) {
9 X1 a- U: W% o - this.checked = true+ N9 T. W+ i! {- @0 `0 i
- } else {
3 y9 V* R2 `) q/ o - this.checked = false. q2 t1 l: k: r2 J" U _
- }7 u$ ?: Q' W: _2 Z9 l
- }4 m/ K) G8 k. v0 M5 D3 C" H
- }
0 J$ p/ K7 S7 {1 T2 i: [# { - })
复制代码 % K) g$ z9 S& D! q
3 g4 q$ ~2 b' C6 a8 |/ L$ t7 k% o+ n4 M9 t" ~/ d6 y0 P
0 b8 w9 ?% P5 @4 E: L8 A! s& B
- x; u: Z2 a7 A; |! L
+ y2 Z' ^ c# y8 b+ X U& O% {' s, ~) f1 O4 m- V5 J/ w% M) D
# r3 g3 z6 j/ I5 H
|