这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
4 `" i$ k2 n6 {- <div id="app">9 m& P. r2 G" W8 T1 X) A6 P; D
- <p>input 元素:</p>
5 Q! ]5 O' j# v u4 H) x4 m& B& { - <input v-model="message" placeholder="编辑我……">, f+ N" h3 X6 [
- <p>消息是: {{ message }}</p>
$ Y6 G: [ ?0 }2 O: m3 E& B& ~ -
) i4 l) |: L4 z( m+ L+ e - <p>textarea 元素:</p>
4 k F$ y2 d$ U# e - <p style="white-space: pre">{{ message2 }}</p>( b% r/ `3 ]. l r
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
3 \% c% V( V/ `. A8 M& w - </div>4 p0 u7 k7 r9 O X3 g
- 9 k! u; p2 o) F2 X# i
- <script>
3 y: ?0 t6 E* e1 D$ i7 |- q - new Vue({
4 t/ B1 J6 K- ?; z& y# M4 O - el: '#app',
2 e* }; r/ r% q - data: {- z# z' ?( V3 z( X9 G7 V7 _
- message: 'Runoob',; T* C8 E0 `! o4 z, Z! W
- message2: '菜鸟教程\r\nhttp://www.runoob.com'! Y+ p4 D O2 f( l( [' p9 g5 r
- }
+ [1 I3 K2 }8 q2 |& i) A - })+ N7 J! r' \6 m. t# m* z, v
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
k3 }1 e. g7 e! C ?- <div id="app">
6 m6 J4 L9 F1 h4 Z1 w0 X% x" S - <p>单个复选框:</p>9 }/ l! {& T" |6 u, d" U
- <input type="checkbox" id="checkbox" v-model="checked">
7 \0 p/ s* [$ z. k7 B& x - <label for="checkbox">{{ checked }}</label>! L! J) |0 X- v5 Q# ~+ a% {
-
* V4 I4 L9 a# Z. P: b - <p>多个复选框:</p>
; [2 X1 y/ C* r! Y3 Q1 N - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
7 z! U* D, L7 Q% p - <label for="runoob">Runoob</label>
3 `8 O& O) U' J* l* k# }" _ s - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
- L" j/ q: l6 g! ]2 F' ]5 O* J+ X - <label for="google">Google</label>. Y$ ]" g7 M4 E6 O
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
' P2 O* M' i5 {) [- n" @0 w - <label for="taobao">taobao</label>2 j j! Z9 r* a) L
- <br>4 M. e! P! A n- k' n j
- <span>选择的值为: {{ checkedNames }}</span>1 f# c* @- `: x( R
- </div>
5 W4 W' H6 n- T: ? - : h, f( ^5 a6 _, Z9 o* Y- I
- <script>
& Q. t+ E( b; z4 u - new Vue({
) q1 Q- f2 t8 U5 u, N - el: '#app',: @" ], Q" @$ _- i3 L$ q8 T
- data: {6 _* C. S# Q: d7 p; x, d
- checked : false,, r A$ N' s6 X, S
- checkedNames: []$ \3 D3 I- w2 X1 v% d
- }8 h7 w7 p1 N4 Y3 P% p
- })9 j7 W" e C% _
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
9 i. a2 X5 i) i+ }" o- <div id="app">
0 e; C4 @: o3 B* ]" }- g( V - <input type="radio" id="runoob" value="Runoob" v-model="picked">
" M9 E% _9 i! l8 k% Z - <label for="runoob">Runoob</label> }* L, J' G! q- U
- <br>$ ~, s9 A6 o6 j; o. p
- <input type="radio" id="google" value="Google" v-model="picked">
$ @: c$ x9 d- P7 G- `+ S' m3 k# e& x - <label for="google">Google</label>
* R2 L7 C2 Q; Z8 ~ - <br>& L* ?5 K9 ]) }, u
- <span>选中值为: {{ picked }}</span>8 C0 @# V& q8 J
- </div>
3 J ^: s* H% P3 b: \* k) w - 7 U6 `! C, ]7 r# ]+ `8 D( s3 H
- <script>3 F$ a5 y) c4 |& Q7 G9 l4 ^
- new Vue({
1 `) Q W: B4 X' N0 [- x9 T - el: '#app',
3 P# ~: {2 p1 \ - data: {
! c% x6 \/ a9 E6 W - picked : 'Runoob'. T, n" r/ u- h( M( B. T) z. O
- }6 q2 i8 O, a" q. j7 z
- })
d5 ^7 S* A' b4 P, Z8 d - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
8 `8 i6 \0 Q$ _% L( Y- <div id="app">, V3 Z6 H; [4 Y
- <select v-model="selected" name="fruit"># q/ v# y0 W" Y6 r- b D, \4 R
- <option value="">选择一个网站</option>$ |) _! s h, \! h
- <option value="www.runoob.com">Runoob</option>. b; k( h% P5 V; Q
- <option value="www.google.com">Google</option>
5 Y" ?' u+ C, ?3 l* d - </select>
- L0 i/ P+ s9 N, {! t& L# F -
6 U& ~ t9 I* w' k- ?$ R - <div id="output">3 {- M. |! K$ ?0 g
- 选择的网站是: {{selected}}. E+ I9 j& G) p4 B9 R! {7 A
- </div>
' b2 V3 }0 [3 w# R8 o; T7 ~ - </div>
5 {: G" t( `; D" j! v -
& k4 [$ L T! W' P! J - <script>
; X" L! z( x O% \" Y/ a3 B - new Vue({4 Z/ R4 q; @! t9 ]. a
- el: '#app',3 v+ c E! D3 `0 b
- data: {
9 `. s0 U0 v! |. W& K - selected: ''
0 T( F8 S8 x( K* a- L1 k) }1 c - }: ?5 h( ^. b& q
- })
/ e! J( }7 |1 {3 \# M, b - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->& X6 ?1 `3 r; t7 ?/ r
- <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 Y7 ~4 j( @1 H# l H
- el: '#app',
) o# o+ H3 c" d- O - data: {9 D) b( A+ Q9 Q: n4 I% @
- checked: false,' O# }/ H; @0 g4 Z8 [. v1 C
- checkedNames: [],
9 i. S( ?6 y3 j! V7 j# B# x! ^& } - checkedArr: ["Runoob", "Taobao", "Google"]
7 ]! N1 f/ t ?6 X9 O - },
7 L7 J* V# i. W: ]* f - methods: {0 q5 V( ]5 x9 B
- changeAllChecked: function() {; j2 |7 \1 _, E N' D
- if (this.checked) {
( i' u \0 c6 J6 M. C3 X6 o1 I - this.checkedNames = this.checkedArr x* Y; x: w$ _0 W8 }
- } else {/ o; \6 g6 V2 l, X6 X, j( S
- this.checkedNames = []
, J# d) l# Y4 b6 @ - }+ r y) c/ ]2 ? P J+ T
- }
- K( q$ T; }+ `! { d* r' [ - },3 b1 B9 p8 P+ _) m, S
- watch: {* I6 @+ g5 N, n1 r) t2 f
- "checkedNames": function() {6 U" Z3 B' X) X) I9 p6 q
- if (this.checkedNames.length == this.checkedArr.length) {* ?+ z+ j6 H$ V8 R# Q! J
- this.checked = true, c5 G0 h; a+ E; ^8 c
- } else {
, G* U8 ?( {% R/ o. H - this.checked = false
) m9 }% T- L# P _' E$ T - }
4 F& X. K* @ _7 P0 K6 O: l - }/ q4 H8 @6 Z/ Q! x
- }
9 T; R9 {4 }( P7 M% E8 h& t( B - })
复制代码
& Z" E/ f$ f6 }; p! E- |7 L6 F" `0 h. r& A% E4 T
7 C9 ?7 [# r: j- M9 h- ]
2 `# R3 a5 }( K" Y q3 T9 L. w) O3 W
: Y- S# F/ |1 K& k, g
% e6 x: T" b& o: m! |) E" e( q0 B. D5 @: u$ Q
|