|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: ! ^6 s4 [* S: B* I* `' X8 G1 a
- <div id="app">0 w8 o+ ~* @4 [6 ?
- <p>input 元素:</p>
- j( C: }# d5 y3 l C* \0 u - <input v-model="message" placeholder="编辑我……">/ {' X" {+ D$ `, N5 l
- <p>消息是: {{ message }}</p>3 J$ m8 L/ V9 ?2 z! \
-
7 H& I- {+ U0 {' |$ x) T - <p>textarea 元素:</p>( t" c0 b) v: Z* {* e
- <p style="white-space: pre">{{ message2 }}</p>
+ F% {: E( }5 m0 z8 G5 b( d8 a - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>- E5 i! J6 v- \
- </div>
1 c) M: M% [0 R -
% Z! V$ H& o1 ?- h$ w - <script>1 A9 R. \; B+ |6 M- t% N) W7 q
- new Vue({
! S/ H6 ?8 O5 @5 Q/ _- L# Y' V - el: '#app',
) @* Q w. ]$ D; O& k, Z) L - data: {- b! r$ s: Q) l6 }" s# ^8 `
- message: 'Runoob',: Y+ r0 z* L0 o1 |
- message2: '菜鸟教程\r\nhttp://www.runoob.com'# {* w/ N' G4 s+ |+ n0 Q1 y7 c. X+ K
- }2 G7 e& L6 E; N( Y- d& c; d0 L; d
- }). u7 T: i( C# @# Z0 W% r
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
1 A% q; a7 H7 h0 O6 J2 G- <div id="app">5 a1 ~0 m& F+ z# p7 s
- <p>单个复选框:</p>
4 F* |6 u; d" ~* D( K# u: T - <input type="checkbox" id="checkbox" v-model="checked">4 _# ~6 P x1 P1 ?* O6 I6 _
- <label for="checkbox">{{ checked }}</label>' V% P1 h8 j3 ~0 \
- 2 O7 T) Z. U, Q8 V! C5 P
- <p>多个复选框:</p>* W6 [; h% i' F0 }9 I, _- x8 h
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">+ O6 H$ U0 B, \& t9 A
- <label for="runoob">Runoob</label>8 J3 r" N4 b' y3 b+ N9 u$ }% _
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
( m9 x) e! V) l" M0 M) ]# S - <label for="google">Google</label>
5 T E% E* w& @( n" U - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
4 d* W% [! o+ Y& [ - <label for="taobao">taobao</label>
3 `6 x2 L+ G4 H t' O - <br>
4 ^% _. {1 i3 @) E) ^6 I - <span>选择的值为: {{ checkedNames }}</span>
" O) E/ T% ~2 c& _( d0 n - </div>
1 X% v5 a% O( r/ X1 i: p; a w - 7 t9 Q2 R" F( k. G) r
- <script>
/ I9 n* g- e8 x1 ?* R - new Vue({# n8 Q. n0 {5 B3 a) L/ X
- el: '#app',
2 o- ?+ ^. y0 b4 g - data: {, c; O$ T9 U& _+ n
- checked : false,/ P) x! Y/ j5 N( B0 _5 a2 r
- checkedNames: []: D, f$ o- M( W" Z0 Z, \
- }% U: r& K: W; l0 Z
- })
- h; L) \8 C4 s/ r$ o) c - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
3 q; a$ N( s$ N& B% d- <div id="app">$ G6 g- l' Z9 u
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
' w1 `" Q/ T% ~9 A - <label for="runoob">Runoob</label>
# y# a. D4 N) Z4 B - <br>7 c% X" x# j* o! C' O. P' r
- <input type="radio" id="google" value="Google" v-model="picked">/ N' A; W2 G/ s/ N N$ Q2 b
- <label for="google">Google</label>
- _$ v- j* N! o2 G/ }1 i - <br>
+ b2 r$ j' a5 F" a) t- c - <span>选中值为: {{ picked }}</span>5 r3 U* W& B# f$ J% q2 J' m
- </div>
, w# r, G' E1 G4 m; ^# r5 ~ -
4 k% O* Y7 I; A - <script>
1 L' a8 O& P3 x0 B! \# J0 x2 i* Q( t - new Vue({
/ b/ Q! q$ ^3 G( J3 ]/ N7 O! H+ ` - el: '#app',
: A1 ?1 {6 K6 s# I% [ - data: {
: C( m5 M* b2 H. W4 T - picked : 'Runoob' B$ k* T1 j1 N+ z- @
- }
. Y: {8 g4 i# d, M* O' \6 Y+ R - })) C# E: Q6 f, o2 M! }
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
5 b' P( I) R7 w- <div id="app">' i$ M1 z; X9 a1 A" Y' m
- <select v-model="selected" name="fruit">
" X1 r7 @. B+ j- D - <option value="">选择一个网站</option>) N: T9 d& F0 C0 W
- <option value="www.runoob.com">Runoob</option>: r2 c0 p. v1 a
- <option value="www.google.com">Google</option>! k( ^* `; o4 J+ i6 A- ^8 W
- </select>- C) P9 `, J/ m0 v7 Q. x) e
- 7 ]7 f- I k( V7 [
- <div id="output">7 a( S- J$ J' i |, t: r
- 选择的网站是: {{selected}}
$ x/ e0 T, C# [, G; u. F - </div>- c! u& J, c$ I0 Q% q; ~6 l1 w2 F' c9 Z
- </div>
+ g4 c, D. w5 H5 ` h -
. [* s, K8 g4 o - <script>: f* b5 Z2 Q+ ]& U+ r5 }: v
- new Vue({
p! h. I# l8 P, J- { - el: '#app',/ s, Q5 T! ^* {5 [
- data: {
4 f4 _( N; h( u6 y7 Q - selected: ''
9 } g+ x' m0 E- q) y* B( v' b4 c - }
) r: c5 t1 U6 n - })
9 c3 w. l ^" T1 {$ a7 t/ \ - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
% f# ?' y2 Q" F9 B& x! N! x - <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({) O: C/ Z1 l1 u3 r" b P
- el: '#app',
9 @. a: f! j! W! R i! L - data: {# ^& U. X. {0 | m; E: k
- checked: false,
* m8 T, z; [) B, J - checkedNames: [],
& j" s- ]" W7 j! s$ Z - checkedArr: ["Runoob", "Taobao", "Google"]
% J) G1 P) x6 [. R+ d- V& j1 I - },1 O! k5 o4 o) B u! L
- methods: {4 G8 p5 n" B, `) l/ \
- changeAllChecked: function() {
: }3 M) O1 o5 ?# ?9 E - if (this.checked) {. [; s' H' ~1 V. S+ V0 p
- this.checkedNames = this.checkedArr1 x& q; ^; {# M2 o, V- b
- } else {
' a0 x; y6 Y8 ?' d( P4 g - this.checkedNames = []6 L% e4 w/ x/ q# l3 `# V
- }. K( ^0 q( t9 R: T( u
- }
7 O. s8 u7 S# F- G - },
" I2 {. Q/ H( J0 [% g. ^ - watch: {- L& i; B. _+ C# H1 v9 J Y% h
- "checkedNames": function() {0 M* Q, m' I) F% g7 k+ i2 T
- if (this.checkedNames.length == this.checkedArr.length) {
2 I/ ]- e) A& \: I' e - this.checked = true4 F7 U( H2 ^1 y- U5 I
- } else {" O. J" U2 P& A8 i. p7 w
- this.checked = false
3 d/ v8 m7 E/ R/ E2 b - }
* ^: z5 b% C6 {4 ~- J" L - }+ K' t3 p( |+ w; b$ E
- }
" P/ v& K, l/ d$ ~2 V - })
复制代码 1 A$ v2 i+ `* E2 u7 Y5 C' V2 |8 f& |
4 e+ M. P& Y; h/ U$ Q& V ?( y, L( Q1 r1 c( c
- c8 o3 Q; F: |; i5 F; c
, @! m" r7 [. L, V* @+ D
$ Q1 }9 [2 p8 }- j+ w; X: C
L0 G; ^; {/ t8 h2 f
) ^) b+ {& m+ i3 @9 n
|