|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
5 \# a' u: o; E) ?- <div id="app">
: L# s3 ~6 U( h9 F j o# \ - <p>input 元素:</p># e1 q+ O9 U5 H0 d2 e) D1 `) R: q- T
- <input v-model="message" placeholder="编辑我……">
' G |8 _& b" H - <p>消息是: {{ message }}</p>
% c+ `% C; m8 L( \9 l( \# V! a2 j -
. @1 X, a K4 i; ?; e - <p>textarea 元素:</p>
: K0 C4 k7 W6 q - <p style="white-space: pre">{{ message2 }}</p>
# n4 y H% J) B8 Q6 J8 B- e - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>6 M4 k' B# n( z3 x9 n! B/ W2 h; f
- </div>' t- p& c9 q9 E/ W- b
- ' T7 A$ x+ d9 A% u0 k4 z- p
- <script># ]1 d, f1 C t$ ~3 y, y4 K- f' v+ R
- new Vue({; [7 m* {3 A! P9 ?) x9 a; o1 ]% H
- el: '#app',
& ]4 e2 z' |3 k o, { - data: {
/ L5 {- H; k. v2 ~1 F0 J2 ` - message: 'Runoob',
! j2 C' z$ R' ?7 f - message2: '菜鸟教程\r\nhttp://www.runoob.com'+ i( L! L. `" }" [: b9 ?; K
- }; |- x& L# ?" d$ q
- })- X& R! g' s3 B4 E3 e- O
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
6 e$ C) d& t( R2 W- <div id="app">
1 h6 s. z$ }; I9 d - <p>单个复选框:</p>" R; ^- E1 P! |& d/ ?) {
- <input type="checkbox" id="checkbox" v-model="checked">
; Z1 n7 {: q: B) S9 ^4 N - <label for="checkbox">{{ checked }}</label> |$ @ ]5 {0 D2 |/ k4 W; ~( q
-
5 M; ]0 o" a/ l$ D- P' E: } - <p>多个复选框:</p>
6 i! P# [# k J& D% a - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
1 T- W T# ?5 [ O3 l( J - <label for="runoob">Runoob</label>
6 ^# b2 ]# z# W) K8 v- v - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
1 x/ g) j$ R- S3 F/ n - <label for="google">Google</label>
# l1 f3 ]1 w4 l8 Q: t - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
" n7 v: S2 X j) g v - <label for="taobao">taobao</label>! I' q6 O. r2 ?. ` X9 X7 b
- <br>, q h4 i# S7 [; F; m6 \1 i- X
- <span>选择的值为: {{ checkedNames }}</span>
/ h+ Z. I1 e1 r9 y - </div>
. D2 k8 M* w5 v( ?3 @6 Y& q -
) v" j9 x) J5 A - <script>2 _; h, ]' T! w" l: k" r: ^! ?
- new Vue({6 u) H$ f. k* j$ M5 ]7 p
- el: '#app',
: v1 O D2 r* u6 {6 C, P - data: {2 }) g+ g, H1 t
- checked : false,
0 k8 B4 S: f. ?& J X - checkedNames: []
! d, F" l' Z$ ]0 T# }9 d2 _ - }& j3 ]9 M: {! g8 Y
- })
7 `% u) @9 K, F( G - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮* b3 x: k; I3 _9 u% W1 l
- <div id="app">) L7 |, z' b% V1 G; v4 Z& Q. @: I
- <input type="radio" id="runoob" value="Runoob" v-model="picked">5 r9 w$ u8 |9 B; e) E# i
- <label for="runoob">Runoob</label>( H9 `$ B: [* I! D+ y. x- @
- <br>0 u$ f- }) @! }' p# |
- <input type="radio" id="google" value="Google" v-model="picked">
3 a9 l* j% A5 @& c2 C7 P+ `) C - <label for="google">Google</label>
+ ~% Q3 [6 l R+ O2 X - <br>& n/ z# `: N7 U8 Q0 x1 L
- <span>选中值为: {{ picked }}</span>
' l9 V' t& x2 X% V( m" v ~ - </div>
9 `3 G# ?, _% ` -
3 e* ?# a$ b' a - <script>
. g: a/ W$ r! p* E - new Vue({% L6 e- @- d' F6 ]7 R0 \
- el: '#app',/ O0 ^) K9 E8 V- g' M9 W
- data: {
' U( M' E4 ~7 ?6 b" e) ^ - picked : 'Runoob'2 U2 Y0 H' |. V8 B) w/ H
- } b, w! }0 F9 E6 p( M3 b9 _( p$ v
- })' |8 T$ O9 r: h2 y4 T! l& ~( y
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
: C' A& \# I2 J& f8 Q3 G! x+ V- <div id="app">% ~5 g+ E9 z# V# |; I/ V
- <select v-model="selected" name="fruit">
V" w" k5 V4 u - <option value="">选择一个网站</option>
" u5 b: f# R* q% w7 p- q6 }1 H - <option value="www.runoob.com">Runoob</option>
' U1 I9 | \4 r0 w) T. M7 G - <option value="www.google.com">Google</option>) V; \9 k: Q( x* c5 b
- </select>! }# }# a" ]6 T
- 1 {$ D. _, J( z4 b
- <div id="output">; G3 M; ^/ T* ]5 X `
- 选择的网站是: {{selected}}
9 z- c. t H% L# |! a' E' n - </div>
: |% L6 p2 @6 L - </div>
. Y! q7 ^2 _5 ^! K! l - 9 Y3 k% f+ M( _; v& _7 M8 G
- <script>9 q# W. H, I" Y4 A+ u: h" a% q( ~1 T
- new Vue({9 _4 ^8 {. d% o }* j+ y% b
- el: '#app',8 [- R K% U3 u# T2 j1 S( r
- data: {
% Y" Z( P2 J7 L* p" r - selected: '' h r- L8 t: _; z( A. h
- }
1 C, E3 O `8 Y - })
$ \5 v& c% ]( D: U( D7 W - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->8 A6 B# @! F9 ]6 T6 _# o. J
- <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({
9 d# B2 T+ f9 i) z - el: '#app',+ f1 d5 U9 j3 a* u/ ^% x' [% ~0 W# c, i
- data: {+ e2 `2 m: _4 L( w4 s! z. m& d
- checked: false,+ S' }. p1 u2 R/ G6 _
- checkedNames: [],# S0 ?& h9 z6 J/ g, e7 ]9 P
- checkedArr: ["Runoob", "Taobao", "Google"]# S2 R$ Q# N3 ]9 d! V( I
- },
/ v, @; h( z# U$ ]( l - methods: {7 @# u& f( W1 d* z# p) O+ m
- changeAllChecked: function() {
; m9 i( }* x) T" C3 E - if (this.checked) {
4 x" z% o' s3 U8 r( u - this.checkedNames = this.checkedArr
4 Q; P$ r& y) c - } else {
2 t& Q* V" o. z* P% R - this.checkedNames = []
' B7 P' d5 x# o5 J7 _( \ - }4 G# m0 v$ g9 g N( T; ]
- }
c: X6 e9 @$ M# V! E - },
: i( \8 B6 ^5 x; f - watch: {0 r3 R# e2 Y$ k8 T& ^" n
- "checkedNames": function() {
7 B( L& n- i1 u: N" z - if (this.checkedNames.length == this.checkedArr.length) {" J1 o* V; U$ b j; t) @
- this.checked = true/ ^, c u* o8 a: w. L' H! s
- } else {4 s+ M* l Q/ ]* n: @/ W6 @4 x8 A
- this.checked = false
' O9 O( g& D; h0 g9 v8 P - }
& j/ Q. c2 c5 ~& S2 O5 {) D4 G! e - }9 e7 @0 {% T5 }7 ?1 N9 a$ p5 y. d
- }2 R. F Q+ N8 N8 }4 T
- })
复制代码 - I3 P+ e! a( \) W
/ a7 ~! ^* j' w. h) z7 M$ x# j9 [1 X; `& ]( e
4 O, ?0 n. ~" {. U
8 Q/ r u( J, y) \' H) r+ T7 \
1 i( B% V0 b! A0 s- K; S
$ P9 J) C7 O" L Q0 U E8 L' t) v+ v6 R
|