|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: : n' ~$ L- u- e: R! _' s5 P8 S
- <div id="app">" t; t6 A( `" ? v* j; Q# A; n0 O
- <p>input 元素:</p>
" Z# ^" e- Q Z. e; V - <input v-model="message" placeholder="编辑我……">
$ Z$ ?9 |( Y& g/ J& ? - <p>消息是: {{ message }}</p>
* ]* w) O. W8 ` - 0 } r) U | E r+ a, \' C
- <p>textarea 元素:</p>- g' t/ [2 R; t- }1 g
- <p style="white-space: pre">{{ message2 }}</p>* w9 k) K6 {! Y
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
6 _0 k3 o. D* Z8 u - </div>
9 p: C9 _ {+ b -
! Q1 ?6 V/ _& ?% e& Q5 q - <script>
( R; Z) Q* V5 ]8 A; F. S7 U - new Vue({
* t$ r: N- U0 ?/ C6 N8 Z - el: '#app',9 s7 [1 v: e# M g; p- o
- data: {
- Z6 o1 J2 W% d - message: 'Runoob',
! g; z- ]8 T7 `9 O0 S' B - message2: '菜鸟教程\r\nhttp://www.runoob.com'
7 u1 b1 i+ W; M# V - }
* ^' M) q' x1 z' d) \+ B - })* d& j/ v1 x7 \" O+ |* d5 ?2 j1 w- d
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: . _; f0 _! o1 s$ T+ t* m7 n" o
- <div id="app">
+ r" {1 ^. D2 {( M' Z) L - <p>单个复选框:</p>
" U2 `" R) o) X, N* `; S7 _ - <input type="checkbox" id="checkbox" v-model="checked">
' F+ i* Y7 K! @. V! } e - <label for="checkbox">{{ checked }}</label>
! L ^: @' H7 Y" l - " z% d! Z y/ z
- <p>多个复选框:</p>7 i+ d. d2 z6 i& u: L% h9 ^
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">* p: d9 [1 T3 d7 c
- <label for="runoob">Runoob</label>
! Y. f f7 b) { e, a: H - <input type="checkbox" id="google" value="Google" v-model="checkedNames">6 n7 I" K# w; T4 r E5 w( H' e
- <label for="google">Google</label>" e8 e/ N! H% O* H4 U
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">+ p" h6 C; K3 Y
- <label for="taobao">taobao</label>; G8 V8 G% b6 Y* t7 x& w
- <br>
' i; |: p% X# k - <span>选择的值为: {{ checkedNames }}</span>
. ^. ]% F/ u9 } - </div>- R" V% ?3 f! |; T2 z
- / `% `' O- Y' [+ F3 @ {, t
- <script>- w% J3 B) N! W" [0 J1 Z
- new Vue({
: P, s! S+ C4 d - el: '#app',
& D y+ M' Y. Q `$ p9 y. Q! B0 c - data: {6 {- M. Z% P! i
- checked : false,) n( X! s* z0 p0 V& Y1 {
- checkedNames: []
( j! w5 x9 A" V4 y; C9 s$ v - }
6 h( r: x& Q4 {5 X3 W- ^- Q - })7 Q9 a- p- B/ C" R
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮0 D1 B" E2 O. u- J; T1 X
- <div id="app">
|# @0 n9 R w9 G$ @ - <input type="radio" id="runoob" value="Runoob" v-model="picked">
1 p& h7 k* }7 o! a$ K4 ] - <label for="runoob">Runoob</label>
$ ?- s2 S* {: M; h6 i! O8 t - <br>
4 S/ ~9 k1 [3 e4 K. v% H - <input type="radio" id="google" value="Google" v-model="picked">- R- q }4 h0 r4 K1 c4 s1 [9 d
- <label for="google">Google</label>
/ P+ n- O) F9 ~/ P8 B; y" G - <br>+ ~0 L. L0 V* S8 P- g
- <span>选中值为: {{ picked }}</span>$ t& J* r1 | a. c# Z
- </div>
' s+ k% p1 ^/ q( [* X -
& N. T, A% F2 y$ c9 l6 {, C - <script>0 T# Q% U+ q. l# |/ C
- new Vue({% M/ u0 G9 J' |2 l
- el: '#app',
4 J% L# [- S) T4 R2 x4 W - data: {
6 R( _* m0 Y. {- F$ u! c - picked : 'Runoob'! S& a) W r7 ]0 N9 W
- }& M) G0 v F( X6 P0 X8 s! z7 P" G
- })8 F, g& \" w Q& J$ R
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
% {5 ]4 K; X# Q; S# J5 C: \- <div id="app">
1 e, n R: O6 K6 M1 T5 w6 ^ - <select v-model="selected" name="fruit">
6 i" d; W, b6 i5 w" u6 c$ M6 x0 ] - <option value="">选择一个网站</option>
7 m7 J: h, Z2 u( @1 k - <option value="www.runoob.com">Runoob</option>
4 B3 s( u* i1 o6 F& z; f - <option value="www.google.com">Google</option>% C# {( N* R& m
- </select>
* s4 }, H3 o# R1 b -
5 [* z* J7 L$ H7 t - <div id="output">! F7 L6 ?, j5 ]2 J
- 选择的网站是: {{selected}}
5 |# B7 ~0 h; C; I1 J! \1 z - </div>% D [% F1 ^0 x
- </div>! }: ]& ^8 S. s3 b
-
: z; Z$ s2 ^5 g/ M) ]0 Y8 B7 E. x8 V - <script>
4 k2 z( X# }( M$ F& U2 ` - new Vue({3 }7 ]6 d" w. r! C' o5 z4 l
- el: '#app',
9 q2 W9 G! v& @- [% V& H- S - data: { _; T# C" N# H z. o, k
- selected: '' 0 B1 h# B) |: ~- }
- }
: @" i1 q9 @( s - })
5 Q Z+ H! u5 m3 }6 C1 K% W - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
/ F8 g+ R8 M) M# t - <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 `" R' |5 y2 A - el: '#app',
8 g% {5 }7 W" I, k) l2 W/ \. J - data: {2 a4 L( ~& C( g9 U3 k8 B
- checked: false,) I7 ` L. r: L
- checkedNames: [],* Y% D. m3 x* F! u
- checkedArr: ["Runoob", "Taobao", "Google"]: b" y+ a: g# x, i9 E
- },
" j# ^7 M2 X% @& \: W - methods: {
; @; r4 Z3 A* H& E* K - changeAllChecked: function() {
1 @ ]* [3 V: ~ - if (this.checked) {
3 B3 b2 j. w# @) R, n7 f - this.checkedNames = this.checkedArr
+ t: A; |# {1 ]' B/ L$ e& j - } else {( c; a) g6 U; _" e! A2 t) l
- this.checkedNames = []
& s/ {# R% r. ` n, R8 I - }# n, L7 T/ n( }$ m- L. u
- }$ E& [$ k p/ |9 I
- },1 s; @% [2 A6 T5 z3 F. R
- watch: {
" J) b( _ w) v- q; L- G7 q - "checkedNames": function() {: d4 ?! w& u1 e4 T
- if (this.checkedNames.length == this.checkedArr.length) {& s6 d1 b0 Y/ { K R
- this.checked = true8 M6 ^: A6 p2 D2 m% E) R! n
- } else {
. L3 }- C: [0 Y$ k8 |, t3 ? - this.checked = false& o `- i; M, [- N A6 a
- }
^4 S# m7 {& L8 F! h: J - }0 B' B- x6 p( K n. _' n; |" x
- }# b+ ?2 w, K; b
- })
复制代码 9 g, u" W- ^9 q: p+ ^
* W! w5 t. Y8 w
+ i" F! {, ]8 Z" E0 v3 l- j
& o0 D( C0 G* U- c
- V3 p9 i% k' A6 G9 z! R
# {- c1 A) g" `5 [1 ?0 K* y
- x8 s# R8 L3 S" m9 L. q- o" p& m; V" A0 x9 u, Y
|