|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
s Z1 m# [% Y0 Q$ f6 T% E: M- <div id="app">
3 O3 b. _* O. _+ @6 }, z9 J - <p>input 元素:</p>) W4 P, b6 r2 |7 R& a% r1 K
- <input v-model="message" placeholder="编辑我……">/ o# _- B- b' W, C
- <p>消息是: {{ message }}</p>
$ z& @, g% P* T% S$ P0 J6 S; l - 2 Y4 i8 l: J/ b5 m$ C- Q- H
- <p>textarea 元素:</p>; X2 c' O- L: K& F$ K9 o7 u
- <p style="white-space: pre">{{ message2 }}</p>5 ~; x2 j) r( V2 y1 L
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
% ~/ ~1 w" o3 J' e1 I - </div>* Q5 \/ l$ d+ }/ [* d K/ U. |
- 7 C: e! Z0 A% i$ L) T& y" M
- <script>
) r T) V# c/ W0 h# p - new Vue({, t* ~" R g4 Z* z; c) g
- el: '#app',9 Y3 e0 Y3 p6 h) ~ U2 A& J" j
- data: {* [8 ?. [( I- O+ |1 N; ?$ H7 W
- message: 'Runoob',: @* h. q7 u+ n' \
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
! y9 J/ H- a7 l* w. _ - }
! {- L9 A" e- R' B5 u# A6 I' m+ S, b - })# u3 y1 S2 M! n! k+ c
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
. F2 x& U" z9 K8 E8 w5 o3 j3 l- r# g% f* P- <div id="app">
' Z7 v; h: R3 _, ] - <p>单个复选框:</p>
, Z2 S) C* F8 n& d7 c5 t - <input type="checkbox" id="checkbox" v-model="checked">
) f4 n9 d. K# @" E5 e- d, w. ^6 P - <label for="checkbox">{{ checked }}</label>2 U$ J6 ~* y# Q; F* ?( a1 K
-
& v* K- U( r0 K1 L* W4 z2 M" C - <p>多个复选框:</p>/ k6 K5 r0 O( @' F
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">: H6 p0 i5 b! Q5 U
- <label for="runoob">Runoob</label>- F/ i9 N5 L3 c1 J+ Z
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
5 R: X% `3 s% U - <label for="google">Google</label>
) k; ]' A% `2 T) ]5 ]' c) ? - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">+ o% k# v7 W* Q8 A
- <label for="taobao">taobao</label>
. Q! B3 R0 c& Q6 F/ R0 S% ^4 D - <br>
6 w% n- n% ^( } - <span>选择的值为: {{ checkedNames }}</span>8 O8 Z2 G1 |" P c& V& Z
- </div>
7 Z2 `" ?! l) v5 c& r -
! {' v" k5 M$ [4 @! D, z - <script>
# C/ K, F! K0 ]# i' U& |; a, @ - new Vue({
5 z4 t. L0 Z9 R3 ^& T - el: '#app',
/ f8 t3 l. o: y9 Y5 f6 ~ - data: {
( r. B- y4 o4 ~" h5 {/ P' w3 F- j4 N - checked : false,! T; F" X' J( l$ r3 ~% i0 d
- checkedNames: [], B+ b) h# |% K) ^
- }1 \ ~4 h1 B3 S0 I Y' ?! J) U% Y# C
- })" g$ ?. t1 F4 | b+ Y4 K% C
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
/ a4 W( M4 T: j. ^# i- <div id="app">+ G3 c# a; U: z; q6 e; U% I7 T! V
- <input type="radio" id="runoob" value="Runoob" v-model="picked">9 r0 y$ M7 h! c8 J1 s' H
- <label for="runoob">Runoob</label>" E! j. d7 Z$ M! s7 l n
- <br>, e8 A8 {% b0 S- s9 }. q7 } s
- <input type="radio" id="google" value="Google" v-model="picked">. E. A9 q! d8 v* v, O/ S
- <label for="google">Google</label>; _1 T4 K! P) H7 t
- <br>- T0 Q+ w$ t7 h7 v2 r9 a( I
- <span>选中值为: {{ picked }}</span>
- b+ J7 A- X) w2 n# E% ^ - </div>
6 }4 k/ x4 t, T ]& S( h- b* D -
5 X2 n, M/ ?" o6 n: N! Y - <script>- {# D6 ^. C0 O$ B4 z
- new Vue({* H. ?/ x( a" a, [ v& F) b9 v) L
- el: '#app',
1 c! s9 Y" f8 A: z1 `" N - data: {
# W6 f5 f/ ]! p+ | - picked : 'Runoob'
1 ~8 I* L0 e; k) S$ L5 ?& c - }
0 Z) `+ m, l8 D/ d9 e. U G3 e - })
9 [5 A @3 c! ? - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select' `) D$ g$ M* z6 ~4 G; q
- <div id="app">+ j( r% M# k! H) w1 _& ^5 a* t
- <select v-model="selected" name="fruit">
. C# t/ E+ f9 m% z% x6 Q - <option value="">选择一个网站</option>2 U& M" j6 S8 z
- <option value="www.runoob.com">Runoob</option>, g- t" R) d4 y4 B& H+ i3 O B
- <option value="www.google.com">Google</option>
& C/ \0 L3 O* Y - </select>
, a3 ]. Z7 C5 a* a- B' f. ^ -
* E8 l! O s% x- Q - <div id="output">0 J# J0 x1 e/ k/ ]0 f* l9 l
- 选择的网站是: {{selected}}- _4 M# ]) `" E% d! v, ]0 S6 J8 p
- </div>- a, C- d2 G' s: s7 T0 A
- </div>
* }: y0 g' h. v- I5 Z7 z - # x9 Y; J; P, Z- p) W7 v2 x
- <script>
1 P1 _6 r: x; K- i - new Vue({+ [" [" c, J0 z+ V) g0 ?/ U1 x
- el: '#app',3 g: q! Z) v7 I! y% v
- data: {
8 z- F/ x; d) U$ @% ]2 G6 d5 j6 C - selected: ''
" L% a1 G) J" T3 t% b5 C8 D0 B" X - }9 O* T3 R6 v( z+ C/ P) W2 L) X: H& [, y
- })
' R* b+ c5 S1 X' A. B0 J, g - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
8 Q: g+ k8 S4 d. Y4 W0 m - <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({# E j5 I; t0 [. d8 ~
- el: '#app',# g$ b* M8 t B) k" r" e
- data: {' E# O$ \# Y+ l7 W4 ~3 s- h$ F" z
- checked: false,- W2 X' _8 F: O/ k& y
- checkedNames: [],
# d/ Q" L) }* B; F* d, L: |, t - checkedArr: ["Runoob", "Taobao", "Google"]9 T3 o; U0 u/ T, h( D, l
- },9 c+ y T. N! p; i X
- methods: {* M1 ^- b: |8 c; n8 N/ O
- changeAllChecked: function() {
$ A/ e. l; C5 S! _: ] - if (this.checked) {; h) G: P% f/ }2 k8 f7 g
- this.checkedNames = this.checkedArr" q5 v* {8 J3 f& i: k: c% o6 M! t
- } else {
0 P% f1 d8 m1 L6 y2 e: ]. S8 o - this.checkedNames = []
, E% s" z1 G9 u6 t0 s - }
. U$ {# w$ i9 {) l* a2 n - }
$ I5 c- _( a2 x5 M9 K1 @- @ - },
; N8 k# O4 _+ ?& A: }2 m) X, A - watch: {1 g" K2 Z2 D! @6 }- n) q! K/ ?
- "checkedNames": function() {% h& _0 [* ^+ @% `
- if (this.checkedNames.length == this.checkedArr.length) {8 h9 Q+ S6 r! B, \% Z1 R
- this.checked = true
( K9 G0 ], u7 I1 B - } else {
! j* f5 s' ]. _1 y, e - this.checked = false
, O6 F8 t/ s7 D s u7 K - }
/ Q, } J0 \. E* y+ p$ n - }
( H* I+ `5 `2 `7 L! Y( E - }
5 U4 u& |0 n- f" A5 t: { - })
复制代码
- ]9 z8 A" i$ h3 K- [% L& S U: H7 c" G! K/ V5 S
' b! [3 D% j$ H9 U% D& H# w0 x8 s6 R
. W1 z+ q# Z( Y ~. D
6 m# {' h" t% @" P
0 F8 R1 u2 c z n2 C* k+ V, v( \0 y8 [( W5 k% F$ p4 H% ]
% w* f# k e8 P" D+ V
|