|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: & J! t/ Z$ i- n! k
- <div id="app">
+ H4 @. V1 c$ L% q( T - <p>input 元素:</p>* K) p% i4 Z& X! m+ z7 l1 M# Z
- <input v-model="message" placeholder="编辑我……">
+ X7 O3 w1 S L- J7 T5 f - <p>消息是: {{ message }}</p>2 }( A6 h6 a! Q, T& |5 k o
-
* m; d( {& x5 \: ]% N3 M9 I - <p>textarea 元素:</p> ?4 ]2 P+ c+ E3 |2 y l
- <p style="white-space: pre">{{ message2 }}</p>
3 y" S$ w( \1 A/ e0 ] - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>( l- _( P9 `( k E' k
- </div>
9 |( K+ p2 D; @, t - 8 n- W! Q( E7 @5 G, L
- <script>
. }# g" I4 @( ? - new Vue({2 Y5 n2 e/ U7 K1 g( Z9 Y8 k
- el: '#app',
" a# L5 D0 E: _3 A @, i - data: {
" ]1 j, d/ B C, n; S- h - message: 'Runoob',6 J* ^; M# |4 X7 G: `
- message2: '菜鸟教程\r\nhttp://www.runoob.com'0 q X4 b2 h' d& x3 E: f1 r
- }4 U8 d( m9 d; `. I+ D* K" i
- })1 c& }& C l% F/ I
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
- @! ]/ z# U; g; |5 V: v9 a- <div id="app">
7 [. U6 K) Y4 }) f7 K - <p>单个复选框:</p>
|9 `5 B( ^8 w7 ?7 W6 I$ @* } - <input type="checkbox" id="checkbox" v-model="checked"> K! n7 _* Z8 K5 A( x" s; K
- <label for="checkbox">{{ checked }}</label>% t- M; X5 h6 B! @ H5 M/ C) }7 Z
-
1 a0 V3 I8 C, r; f4 P6 r - <p>多个复选框:</p>6 a: V7 e: D0 p( q4 z, x% P$ n
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
9 W5 ~1 ~2 H. |/ v - <label for="runoob">Runoob</label>6 H' {( y" m5 H7 J
- <input type="checkbox" id="google" value="Google" v-model="checkedNames"> [3 n$ K% A8 s
- <label for="google">Google</label># t7 y6 i. [4 ]. r& c
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
5 c, q( R: E* B% f7 x" u' r. y% ] - <label for="taobao">taobao</label>, v( r1 }; a2 x! T
- <br>
0 W; z1 g D% x: U# o* X0 L - <span>选择的值为: {{ checkedNames }}</span>
$ e4 f( D6 I; Z' i# B - </div>
7 V& V! c" a; `: \6 m5 q5 J1 y* e -
2 t" q) e }( m" j3 H - <script>+ s* A( N# Y, \6 Q7 f6 P
- new Vue({
( {6 \8 a% n, K4 f: W- {' {- q - el: '#app',
& U o$ D9 f7 g9 x. A5 w: ] - data: {9 M2 g" K ~0 T! k4 v+ q, `7 l
- checked : false,2 `7 `9 @. p: b# Z& D, I3 m
- checkedNames: []2 b L: w) @1 k6 e9 I
- }
1 y/ B; \; ^) Q% q( r - })
$ W; Q( K$ @* M/ x5 d9 Z; ^ - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
e$ M+ P, Q, m+ ~, ~% e, u. z- <div id="app">& ^4 Y% ^0 m7 b; m
- <input type="radio" id="runoob" value="Runoob" v-model="picked">6 N3 ~3 I R8 G' {& R+ @$ F$ [' i
- <label for="runoob">Runoob</label>& g5 \% E3 ?- O. J! [2 O+ P
- <br>
2 Q/ t1 l' M x - <input type="radio" id="google" value="Google" v-model="picked">
; `! r! q! t2 ^ - <label for="google">Google</label>
! `4 Y4 ]6 ?: z - <br>
! C. y6 d% N" Y+ Y% _6 u1 u - <span>选中值为: {{ picked }}</span>) W/ ]. {' T; E6 m5 w/ q. j
- </div>
& @0 `; u" D4 k6 X, M* m! t -
2 @, q- Z4 h+ m2 L$ d* N - <script>
0 O( R' Y' _( H% O. N2 L - new Vue({! Q7 Z& g* N, `% I8 \3 K
- el: '#app',
" s. u; O- h7 G* f4 J - data: {
3 L' F* e- r/ h* _ - picked : 'Runoob'
8 e& g( E' c( O2 e% K - }
( W4 _* O4 W8 `- k9 U, l' J' R - })" U7 n8 ~9 P2 G! r- z5 T
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select# h# \6 Z b" J( }
- <div id="app">) {% E, p$ `+ Q) I# j2 }& N
- <select v-model="selected" name="fruit">: S- M4 q0 U* e$ v- m: u, d
- <option value="">选择一个网站</option>- a; x4 ]7 a/ r! Z
- <option value="www.runoob.com">Runoob</option>
( M6 n/ m. R* y5 Q( l3 j( X - <option value="www.google.com">Google</option>
- _/ j2 w: Q6 \6 R! i - </select>" f2 K- \6 O* {
-
2 o/ w) b% e6 s6 {! p - <div id="output">
1 y+ m' _7 }$ w- N9 X1 [5 b2 t - 选择的网站是: {{selected}}
+ d# I0 c$ P+ q - </div>
; [2 i5 p# O2 S8 y- F3 H, w - </div>
4 B& ~' r5 Q( C9 e# x) q$ ? -
. b( K7 x* j {# k. S8 [/ y - <script>
" T8 U8 l0 h+ S - new Vue({
; E: A5 y' k. s9 T# j+ d0 m( J - el: '#app',& i2 G5 i. D) }5 |9 r7 i* u+ b! }
- data: {' e1 k/ M l; n" S9 a( q. u
- selected: ''
5 w) K7 C. y1 F) d: n - }
4 n$ N) z) }- r( x: H2 x+ d - })) q, j2 G A, Y: T4 k' }; o
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->( {3 F0 V; V5 Z5 d: O( f1 ^" g
- <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({
, W+ l G0 m% j; O - el: '#app',
& i0 K6 g x' N2 O: d+ U - data: {0 p0 j. j7 b- t
- checked: false,
6 [; V- \/ q4 c/ c7 \: E - checkedNames: [],# B4 U( z* N1 T; n) `) ~( `9 Z7 o
- checkedArr: ["Runoob", "Taobao", "Google"]
6 D y& U5 _; h% t2 k" V - },+ Q8 ?- \9 ~% h
- methods: {
: o. G) w. b, \: g8 k* e- S8 N* @0 j - changeAllChecked: function() {
2 R# {0 W: x# B, p# T; M - if (this.checked) {6 Y( s! ~6 x: ]8 O8 c$ G0 j
- this.checkedNames = this.checkedArr- {# M' ?! Y+ i% l+ A! @
- } else {
: z* B. r4 T8 x! k/ ]0 p - this.checkedNames = []
/ F) m% {& \+ E5 @* ^/ c7 h - }
$ b1 F& o1 \0 B: U - }
; C2 l( f: f& Q4 |2 n& }( Y7 ] - },
0 a( [, L1 P# f$ _" @# Y% M' d - watch: {; X4 e2 D( G: A" a
- "checkedNames": function() {4 n: U) _' }6 { I$ j7 j/ T! l
- if (this.checkedNames.length == this.checkedArr.length) {
- O( w. P U6 e% k& G) s9 } - this.checked = true' d) `0 n9 t+ M, m6 m" K% s! | _
- } else {# f- f3 e' b" H( L( P; @
- this.checked = false
0 c/ ?2 s1 ^# T" t# i - }
2 o& ?& }# g7 c* k5 r% { - }
1 b: I9 F7 @1 K7 z5 f - }' E3 t. L2 v% w4 A8 m' u
- })
复制代码 % F. l/ d& z$ V, d7 w7 @( N) P
0 X3 f3 A# h s
8 ]7 ^% p2 N. m5 l1 h: {( `
6 U) L- p0 Q7 C. y( ^0 F( P
; }% r1 {9 t6 z1 v
; c6 \1 @! c9 R) T2 f. q9 _* e( h5 }- B
9 F1 ~5 e( }1 k* @: P% o- ^! H |