这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
6 C+ h! K# |$ G, T- <div id="app">
3 {& Z2 g, m2 M5 w2 v! L/ n! p( o# T - <p>input 元素:</p>
4 L& X1 ?. [1 b" o) r! e: } - <input v-model="message" placeholder="编辑我……">
: D, K, U. u5 C' [9 h - <p>消息是: {{ message }}</p>
. u/ @ g2 [2 a% D# u& ?; E1 N - / u; T. `1 z, {. c% @
- <p>textarea 元素:</p>/ ?2 O8 J9 `8 f( m7 M; O/ E
- <p style="white-space: pre">{{ message2 }}</p>
3 G2 v% J0 D# p- O - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
& a7 C8 |0 D+ d - </div>
( Y- s" z" Q4 m1 a% e- U, ~1 `( R6 Z9 r - 2 S1 @/ f6 A+ j
- <script>* A: K \$ g9 [% y+ G( F
- new Vue({
3 D* a/ @; U: Z! G% r6 v - el: '#app',$ z1 ^' s- @+ q5 Z- r) C
- data: {- R: z O! k4 S* o9 Z4 |
- message: 'Runoob',
+ F1 [, k6 ~6 I2 J8 q: Q0 P - message2: '菜鸟教程\r\nhttp://www.runoob.com'! J, v6 q" M! m: r9 p1 G) v0 O" U
- }
1 R" a+ x! l# X d1 x - })# ~* S* C, D4 ^$ o% X# S; S
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 4 k: J- h4 N3 H* E2 S
- <div id="app">4 J& \3 s( p1 q: I
- <p>单个复选框:</p>
9 u( \( u6 Q1 |/ m+ y - <input type="checkbox" id="checkbox" v-model="checked">
. g4 T- L: f; i9 ?3 Q - <label for="checkbox">{{ checked }}</label>
; K9 g$ R. p) K# v - 8 c6 Y' Y' S. ^! l! J! U t" c' A$ j
- <p>多个复选框:</p>0 E b% `+ S7 B5 |; L
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">4 h$ ]1 Y8 I. v
- <label for="runoob">Runoob</label>- }2 n. j; ~- e) y1 C! C0 }
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">1 q4 E& H a( [
- <label for="google">Google</label>
$ Q' Y$ F+ N+ ?7 U, o$ W+ _ - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">5 O7 r7 P7 f# f' V4 g( Q. p& f
- <label for="taobao">taobao</label>6 j) {7 a: H q5 }
- <br>- r9 g4 X) A- ]7 N, N9 G
- <span>选择的值为: {{ checkedNames }}</span>
4 H( c+ P$ w* B* x6 p4 U' H - </div>
$ z. y2 k& e" F* e -
% V$ x3 ?; q& H - <script>) Z: i+ f: N0 t# n
- new Vue({7 }- c; m$ _6 L2 J
- el: '#app', p( s- F2 u& D
- data: {
& O9 y6 |- d, l - checked : false,
[% v/ ~3 x' R" O0 \ - checkedNames: []
1 o$ _1 J ~3 p& i% d9 O8 ? - }' i$ M: a: \5 L) u0 X) ~
- })
O" L2 w5 r, a4 s% f - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
- U; M% P9 a# d/ a$ s: b; _- <div id="app">6 ?( X" v, k* ~' U2 |% O' p
- <input type="radio" id="runoob" value="Runoob" v-model="picked">! B8 u5 J9 ?% d f1 Z
- <label for="runoob">Runoob</label>5 b6 R6 h- }. ]8 l4 ~; q8 M# _
- <br>
* J7 j* a' X; z+ D2 {! h3 w. A - <input type="radio" id="google" value="Google" v-model="picked">
; ^) h; ]$ l4 y& P( b9 ]5 a9 C$ H; H5 G - <label for="google">Google</label>, I6 |4 R5 p2 ^) }/ \7 i' K, v6 M. f
- <br>
4 J* H4 b \* s - <span>选中值为: {{ picked }}</span>: E9 |6 V, p% G2 o! R/ G
- </div>3 O! ?* F. ^1 l, |- e+ {" S
-
9 }3 ?5 S6 l0 I - <script>
! }6 l: l2 G6 n- {: a5 z - new Vue({
+ y. k O7 O' O" {5 Q' I; F2 e8 @' y - el: '#app',# F. i8 H! H1 t, [( c: f- B
- data: {
- g1 W0 }- q/ f/ c+ f4 R; C" P# H - picked : 'Runoob'
( N- T6 J$ R' \0 A4 K - }
" I5 o9 B4 `) G - }), |$ ?6 R* [$ w) j5 z4 Y" X
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select* q- y! G% t( b5 s' L
- <div id="app">5 m8 W. ]# B4 w& z: Z( M
- <select v-model="selected" name="fruit">& a+ I) z+ S: V- ~3 U+ N
- <option value="">选择一个网站</option> o' ^8 A3 }, O+ U: @0 C
- <option value="www.runoob.com">Runoob</option>
- x I" T7 H* [8 _+ {3 E& o& M - <option value="www.google.com">Google</option>
/ Q$ | E- H7 {- ? - </select>5 b, E1 W7 g5 R
- " t2 | w, w5 Y2 B
- <div id="output">8 `, f# h7 R" Y' y
- 选择的网站是: {{selected}}
6 h8 g! ?# G* ]3 S - </div>
0 g0 o! h2 F2 I1 r' i3 R: l) ] - </div>6 N# u) S J$ x4 u) C2 J; X9 y; n
- / z4 J$ Y. e" \ V# h4 O) k
- <script>
* V0 V- ?3 w1 k: l - new Vue({
" P3 B+ \* Y! H/ H2 z1 X% _ Z - el: '#app',0 F/ W' Y3 }5 [! S" F1 V& B; p
- data: {2 G9 f0 d8 N0 f1 K: T" v0 x$ l
- selected: '' ; ~0 _# l. ~2 a3 H, E' o F
- }# _$ |4 {" P# w+ Z$ T
- })% g) v8 I0 n) `; w0 i
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
1 M- m, V5 T# W0 ^+ z* | - <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({1 @9 e0 U) \9 _/ Y6 W( T
- el: '#app',; A# p! Y2 g6 N% @6 q/ F
- data: {
3 \5 O5 x" @5 \6 r - checked: false,
. r2 s0 Z8 d1 W5 H9 x - checkedNames: [],8 N. M4 G" k+ l$ T' T
- checkedArr: ["Runoob", "Taobao", "Google"]
% a- v* ?# F) K% X1 a - },, a9 Z8 j4 ?9 G' y2 l0 g
- methods: {( @; F% Y: p0 ^# C7 Q
- changeAllChecked: function() {
4 X5 X; h4 b' O- C/ `( I8 i& W8 l - if (this.checked) {7 p2 |8 v/ W) z% D* }9 ^ L
- this.checkedNames = this.checkedArr& i4 M# }; ]: n1 S' m! I% {
- } else {* s6 q }; T' F0 q
- this.checkedNames = [], \: \. ?6 [8 I' E. M V" }
- }. ~' P% J! [- D: }% \
- }
3 U) H" F G0 t* @) L - },
8 B# F; C0 r" ~( m* H7 h - watch: {
& t! t: i. D9 n( O0 V. g4 S6 E8 Q - "checkedNames": function() {
0 x6 W! a8 d/ w M" i i - if (this.checkedNames.length == this.checkedArr.length) {" u# C9 K2 J* s6 u0 Z
- this.checked = true
f- T6 E" d2 i - } else {, s j% i, K) f9 ^
- this.checked = false
; J! i+ U3 [% H6 [ - }7 ^0 w3 f, c! t. T _! K
- }% c: |8 ^% O( Y4 w7 G0 z+ J( P7 S) s
- }
7 V& a6 d0 k6 t% v0 q - })
复制代码
o& A' t7 r0 s
% F9 h! s4 C7 d$ i: U( z) l( C- A( m5 d6 z( [0 g7 {: @
! C- i& b+ Q/ p
8 [ j/ w( J& ?( k' d
' G% ], ~8 F6 x- {
x. C; ]2 q, s {' D
: o9 N \" D: V( |: R' b- [: x |