|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 9 e! Y. p& P% G1 c" }0 U% i' V
- <div id="app">
, ^8 ?7 T5 A- l7 }; e; E - <p>input 元素:</p>
5 V. T& ^ @3 h( x! M2 d; l8 R - <input v-model="message" placeholder="编辑我……">
4 h9 ^0 x) G$ V8 ] - <p>消息是: {{ message }}</p>
4 H& {8 @- Z+ k" c -
' j7 r6 Z/ M1 S1 p - <p>textarea 元素:</p>
! l' d. d& W( h) K8 J - <p style="white-space: pre">{{ message2 }}</p>
( {2 e- D2 I+ S7 K7 o - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>% k1 R' G' k3 W3 [
- </div>8 [7 t) a9 @ L3 Y( B% K& L* i$ Z
-
7 h% p. k, s7 r- B6 W" r5 x1 r6 m - <script>
! o4 m, n% V7 @) s' P - new Vue({
9 I# E% Q- v/ |3 i+ ^* c: _ - el: '#app',
) S: }* i% ~, a - data: {. K) M) a5 t6 c6 P t6 Z; U
- message: 'Runoob',
9 K5 A( V. S7 }( J$ Y* [" ?0 x# J - message2: '菜鸟教程\r\nhttp://www.runoob.com'* f! y. G5 ]+ S8 y
- }
; }4 i3 |; w* ^; U! c - }) }1 L# ^2 `2 U- ~
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
8 r9 E4 t: @# F4 l4 t) K- <div id="app">) ?8 |+ P- G. ?4 ~: h, v7 Q" J% n+ v. {
- <p>单个复选框:</p>: `. R5 _% [+ e% ~7 ?, ]0 x5 y
- <input type="checkbox" id="checkbox" v-model="checked">
& h: y. y1 O& j6 _$ W) K# [ - <label for="checkbox">{{ checked }}</label>
" ]5 o7 J/ x( w. G$ F: d) ^ -
- {5 U) o! J/ J8 Z* O - <p>多个复选框:</p>% a8 W3 l% V8 o z& i" ^' }
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
5 o2 K0 m, L& | - <label for="runoob">Runoob</label>
& j; L0 R Q- C% F' w - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
% v! [+ j) N, p# D( ~; M/ Z - <label for="google">Google</label>
4 C$ ?. u( U9 g% a; | - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">% d0 O( n* j9 [' o; V t6 p% `- L
- <label for="taobao">taobao</label>
& ?/ p; F( s( T6 a; ] - <br>
0 A! {) H) B# P$ U& m7 { - <span>选择的值为: {{ checkedNames }}</span>
% d; W% A4 f. y) H, p2 R* Q: x - </div>1 v0 s+ e: t% `" S0 e6 V7 Z9 G
- , l. T9 E% o/ W7 E- S; R( C
- <script>4 h5 B9 y) ~5 n4 o0 [
- new Vue({
% Q& l: m$ ~# }/ n5 V6 W - el: '#app',
. t0 Q% n/ O0 t - data: {
2 {5 X7 @- w% E* ~ e$ d - checked : false,# O* R. ~ u, ]# d4 [* z
- checkedNames: [] B& ?0 C8 G+ O3 A6 b/ N
- }
$ f6 R, W( S1 I5 v" E V# ~ - })0 V2 a# @+ S" H C* p) ~: |
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮# H3 P/ r/ X4 {; I9 {* [
- <div id="app">
9 x3 D9 b' Z9 w# M& y# p - <input type="radio" id="runoob" value="Runoob" v-model="picked">& c4 s9 N& U5 H1 q9 s/ c
- <label for="runoob">Runoob</label>8 Q- R9 W$ a. @: X
- <br>$ Q1 n9 @4 ^" V. F- x9 [
- <input type="radio" id="google" value="Google" v-model="picked">
1 S0 M# u) I# u j9 | - <label for="google">Google</label>% j- Q- l$ u: j/ y1 p# J
- <br>( b% L$ T/ [. z: E6 @; ^
- <span>选中值为: {{ picked }}</span>
3 t4 {, B. Q) _9 d - </div>$ C& Q1 h2 ^' K" I3 G1 U2 C! m- z6 ?
-
6 g: [3 B2 n/ ` Z8 ^' M" e - <script>2 t3 G8 W( ~( v/ F. e" C; U( Y
- new Vue({
; L* d% |8 m* M$ ?2 c - el: '#app',
1 ] `5 p! s; b2 ~2 B3 P! | - data: {/ O; V- P; `# K- T0 F
- picked : 'Runoob'/ y# f4 o( Y2 P f, U. o, ^ b
- }
$ I9 Q& ^, K8 ~* u/ q2 t2 o - })
" N4 B6 A7 d4 [, D" @ - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
( X- P7 W1 e- i7 L3 O8 w9 ]; f8 u- <div id="app">( j4 _% Y6 q% I6 ?
- <select v-model="selected" name="fruit">0 r2 ~: W; W$ T, @3 x5 z: m: W. w
- <option value="">选择一个网站</option> s3 ?4 J! t" O: F# u
- <option value="www.runoob.com">Runoob</option>
0 n* K) \ l% E- t/ ?' e6 V- T+ p - <option value="www.google.com">Google</option>
0 h& j" n. Y8 q9 Q* M2 ~+ A% Z! e - </select>, W! K$ {5 w x6 z
- # [1 X3 r7 ~* G- V9 {8 D* u
- <div id="output">9 b, i; d9 v% [( ]
- 选择的网站是: {{selected}}
7 B# o8 Z* B# e% g3 d% y5 l - </div>
1 v8 |! C; i3 G/ a0 \- [ - </div>
% U5 b; g! `2 H0 z -
4 G1 V' u3 d3 J, J! g - <script>7 E; i5 o& \0 A! j" L6 M1 ^
- new Vue({
, a+ e/ v+ Y ?. Z - el: '#app', q5 ^* N0 K6 B# x+ V# J: S5 [- [6 Z
- data: {
) b. D$ M4 s/ w* y - selected: ''
5 r: p/ g- m' s - }
, ~7 G: d( N8 \' R - })9 M0 E& m9 h3 |1 s" |3 e
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->6 l0 D9 i* j; T$ a" x! V2 @
- <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({5 q0 ], b# ~+ \
- el: '#app',
. d1 ?1 z$ X, a7 H - data: {
@5 b) R, B. F, i$ N+ D1 c - checked: false,
0 \" `/ s: N4 _6 O$ B. W4 z) Y/ j - checkedNames: [],5 \) Y* h ^. q/ p' @+ M) Z
- checkedArr: ["Runoob", "Taobao", "Google"]
4 d7 h. E _' i - },
2 l0 J5 M' ~' t' S: o - methods: {6 L/ ^# m6 a; g6 _& E) d( E6 m& g
- changeAllChecked: function() {7 {% F$ j+ c$ ?/ A- g% ~" ^
- if (this.checked) {
2 ^9 F+ T: L! h& i9 v4 b. U' f - this.checkedNames = this.checkedArr
; N3 }! h7 r1 v - } else {: N( s* O+ E, v
- this.checkedNames = []
" g7 |- {3 @( N. _ - }
. O# v! U; H" L9 M0 Y8 L9 G) p- N - }6 d( P) H4 q! M8 ~8 h. Z/ P4 Y
- },
6 b! {3 j* }4 a. S( C - watch: {
# r- Z2 i5 i! c. F" Y) A - "checkedNames": function() {. o3 U! [0 _) V# j) o' R
- if (this.checkedNames.length == this.checkedArr.length) {; P. `+ S* k( ~: E$ m0 d
- this.checked = true
$ J' ?0 O% t# S2 T7 Q& V {4 q0 I - } else {% F1 F7 a. C9 d7 N$ Z+ D
- this.checked = false
3 ?. F( D- r# \, j: D( n+ Q6 P - }
1 J; a. M& U* Y$ x+ M - }
7 Y1 m2 M# H5 c8 |3 F - }# m+ k5 Z& } }# V; m& v( X# I% S
- })
复制代码
7 n: y# J! C/ u9 ~) Z
1 L) y# P3 O/ c9 y
2 h9 x( e" z; c! i- a. H; |/ s- N( s+ o- ~! N4 U" G) A/ S
8 F6 h/ [. s T4 I
6 k- c8 Q2 M! E) s0 Q2 W( v1 \+ [6 P) j5 e
8 z+ F/ J% f% j$ [ e S9 r' i. h( y |