|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
: U% y8 g) C. @2 E7 u4 A+ y- <div id="app">
" n2 l7 y, l9 n. w8 U! b8 O. L0 I7 j - <p>input 元素:</p>/ l: }3 G0 _! U2 J+ l! ]; n
- <input v-model="message" placeholder="编辑我……">( ]' o; Y& a7 ?1 R* g: Z6 `/ d1 R
- <p>消息是: {{ message }}</p>
, R, i7 v8 ?* _) v$ k5 N% e& V& p( N' T - / T: E' z* [) ~2 |
- <p>textarea 元素:</p>
7 f9 j1 R# |% ]! d8 F - <p style="white-space: pre">{{ message2 }}</p>" t, u" {# P: n8 ~- ~) l$ [
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
9 U5 [- N' R9 z4 q" s5 } - </div>
/ K2 i8 b, o8 \% @$ w9 V% y5 Q -
7 Z" a& x$ K3 F - <script>0 o4 x. n# h G/ `
- new Vue({* q% G3 T! g2 {4 B) D0 s+ C
- el: '#app',
" A: F+ y4 C5 x7 R9 w" d5 D - data: {+ X& @, A/ j6 m7 h8 M7 N: v& Z3 j
- message: 'Runoob',
0 G9 x- U3 x+ E0 Y - message2: '菜鸟教程\r\nhttp://www.runoob.com'7 x3 Z" U+ G) H, ]( m3 e
- }
* m9 d/ o8 F& T7 R0 y3 X/ l - })
9 h, k8 r( _7 i! l8 y j - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 4 F f5 ~, q" p" r6 k) W9 l
- <div id="app">
. t3 S- i* F" M/ s - <p>单个复选框:</p>! F$ h( P, @+ W& `$ O$ t
- <input type="checkbox" id="checkbox" v-model="checked">
B$ N' X- g7 |9 g& u% S - <label for="checkbox">{{ checked }}</label>0 t) V2 ?0 H- U% {: ^8 h5 C* G
- 9 |2 q: m7 o, _$ M
- <p>多个复选框:</p>
: S) Y2 w; k# z" Q& {0 p - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
) U/ n5 x" F" h$ Y0 x - <label for="runoob">Runoob</label>/ |; M/ r8 Y8 Z
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">8 j% N) s# v6 Q6 f: D6 z9 E
- <label for="google">Google</label>' f4 i, Y0 @% n& x
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
7 A) c |; X, H/ J' {! O) C: `( q Y- z - <label for="taobao">taobao</label>
6 f( D9 {, R# k - <br>
/ A3 \- R3 v$ o7 D# p* @ - <span>选择的值为: {{ checkedNames }}</span>
7 ~, o! z( ]5 W5 Z, x# J8 E9 N: M - </div>
- P4 @9 R' \9 e' E/ j - 5 U8 g& R3 t6 w3 z1 h5 k( w- {
- <script>
. |9 O% W9 q$ d5 [3 l - new Vue({" m1 j! p' _; `9 b
- el: '#app',) A8 m4 C; e& c
- data: {
& Q7 _& ]; ]' ?$ J& ^ - checked : false,
1 c+ u( J' b: O( E. j8 r* L) z - checkedNames: []* e- e2 Q ~$ z% S! s/ G
- }% V( [ ^" [/ _$ C& t. z+ W3 w
- })8 B6 v/ y9 S3 [8 ?9 I* E
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮& I4 s7 o# B0 \ L! Z9 K
- <div id="app">( n! M! |# p3 u0 x
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
9 l. q- L4 _5 q( K7 H# U - <label for="runoob">Runoob</label>' M3 N0 x# ~2 p8 m$ K6 n9 \
- <br>0 ^( _0 ^( d! L: r9 K! ^( _5 I
- <input type="radio" id="google" value="Google" v-model="picked">
. A" g! q, l" P8 H - <label for="google">Google</label>
; r3 `5 Y0 f! w2 _. T9 o$ F9 z: e - <br>$ z5 [0 d4 ?* L. o- @3 V+ c3 A
- <span>选中值为: {{ picked }}</span>/ f( r- j$ W- |) W$ c
- </div>4 C* ^" t- Y1 O5 j! L' C/ F
- . p' A9 h2 ?8 [7 H' s# R: ~% i: t4 D
- <script>+ n$ n% M% k8 t
- new Vue({3 o' g( O. a l! d" _8 q L- P3 |9 @
- el: '#app',) r2 t, ^0 T9 w- H/ h! ]2 j0 C
- data: {
0 j! I3 r+ Z- X8 h8 T6 z7 I8 j$ x - picked : 'Runoob', u3 m% J) W2 i
- }" i0 x4 B/ l$ i
- })6 g, h' Q4 g1 C! m# }9 r
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select) I5 y0 n7 Q6 L5 R4 R
- <div id="app">
' X3 f2 _2 @3 t& C3 | - <select v-model="selected" name="fruit">: p+ O; P; m- ]2 \+ m
- <option value="">选择一个网站</option>3 n+ q% d( z6 Q3 ]* m/ E4 V
- <option value="www.runoob.com">Runoob</option># M% i; G% Q$ v! h, O. a
- <option value="www.google.com">Google</option>- @% D# U6 G0 N( s& H- x; W
- </select>
0 S- m; `% `$ E$ p - j6 C& n. A% @ D) _
- <div id="output">/ M. c8 t" o2 Z0 J
- 选择的网站是: {{selected}}
M3 a* O# N! p' R9 V - </div>
/ r# c& ~% {2 M j) W - </div>% n( P' J; j3 R; l$ a
-
: z5 W1 W; J+ O- {. W - <script>2 ]6 X3 J; g6 Z8 f2 H8 z" X
- new Vue({. G4 ?3 f. `' n' O- Q
- el: '#app',
9 B+ v4 f# j5 z. w1 C - data: {1 E4 U& U* B7 F( _! B
- selected: ''
* s7 b$ w# A. L! \6 v& f7 ? - }
% w# d+ `) n U# G0 A6 x$ [ - })
1 V7 K5 Z" e. w0 ^6 U - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->. P, H' b, F2 H! x' ^
- <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({
! N. }+ N2 O7 s* ^( D6 m - el: '#app',1 y6 b; w# w1 G. F/ S
- data: {. {( o7 D% `4 Q: [3 T
- checked: false,5 w4 _: U9 O% s! m2 I+ {: s: T
- checkedNames: [],
+ U, [5 Q# e" U, g! d- ` - checkedArr: ["Runoob", "Taobao", "Google"]7 ?( H9 \# e8 U; ~
- },
! i' k, X) _/ J4 ~& _, }1 }4 l+ }, x - methods: {
) H0 q, L/ L% A6 Y% d9 @7 A - changeAllChecked: function() {2 f8 }/ u' l0 }. P; j. u
- if (this.checked) {
$ A# K- o. h( b6 j3 F0 f - this.checkedNames = this.checkedArr8 ~0 q8 h* U$ w4 X
- } else {
8 a% s; k& T, w7 a D8 x) Z - this.checkedNames = []
( s- d A/ S1 p+ _, z/ c$ v - }
L# T8 k7 z$ P- `. M- K - }* s. I! H7 i W; j- c
- },
b) ]0 ^$ O+ N8 R$ H - watch: {$ {" Y# y8 h y4 T
- "checkedNames": function() {) S: t+ N* `4 D) |
- if (this.checkedNames.length == this.checkedArr.length) {
1 k3 a; E B8 s7 g" b& A8 i6 N( T - this.checked = true
: J' |$ H/ j# m3 u5 H+ K - } else {
3 Q0 l' G$ M+ C9 |# T) Z - this.checked = false0 ?6 A7 H- x5 R# A! B" R3 G
- }
' x( z \4 }& y& a9 C: @. P3 | - }
+ I! `) g5 a5 q! e8 {5 z% t5 b. ]' f - }* \3 m+ K5 a* ^
- })
复制代码 4 {4 p+ s A$ q
0 Y: `' O& N3 `' T1 {6 Z
- K ?8 z( E* |+ \9 y" c1 s, F, h$ p
, b$ V& D: \7 ~+ y6 J4 S6 d3 n$ J5 b
! {' R, C3 F" A n5 k) P
- X* K/ s% `+ n' [6 j
$ o- H& V7 Q" h- U& }! r |