|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 4 W7 ?" K7 S3 n) n8 f# {5 k5 F
- <div id="app">- o: u8 x) f9 x& ~
- <p>input 元素:</p>1 N: l+ v$ H0 i! G0 L
- <input v-model="message" placeholder="编辑我……">
J- M. W# r! S. Z - <p>消息是: {{ message }}</p>
6 v) H: |0 S ~) K. x9 i7 h -
( p& A3 d# N. |) `6 l - <p>textarea 元素:</p>
0 z, K Z/ Q f K( W/ G - <p style="white-space: pre">{{ message2 }}</p>
) B4 A0 D K- T$ n+ X - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>, C7 E$ ]; X! h5 W7 Z, k D
- </div>
1 j1 a( |: a; I* T/ ? - & q1 M) A& y8 j' h; y' {
- <script>5 L9 b8 U9 T, k9 h, N- {
- new Vue({
* q, l/ G* {0 q4 \1 v+ J% k1 _ - el: '#app',
5 k) P, s8 i$ |, T+ E8 ^( H - data: {4 e `# C; w: F' f% R! {9 `* f. a
- message: 'Runoob',
5 g t) a7 q$ \3 i - message2: '菜鸟教程\r\nhttp://www.runoob.com'4 q( B- m3 q& g, S6 ]. ]
- }! S. d3 }! E9 [ V/ Y0 k+ o5 }, p
- })
7 @* _8 z ?: s/ f. h9 r" l4 U; U - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
) V5 Q8 r$ e. K- <div id="app">3 a# t0 J+ E$ Y. z3 u/ u
- <p>单个复选框:</p>! N0 _- F3 d! N
- <input type="checkbox" id="checkbox" v-model="checked">
1 p- v, H" \, f1 ]4 k) U" { - <label for="checkbox">{{ checked }}</label>
5 S' f! y- S) w$ j! N: \ -
; C$ l+ [# H4 k - <p>多个复选框:</p>
A+ Y: n" k' o/ A% z - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">* U0 s. h2 }8 u. f0 m8 V2 L# f9 m
- <label for="runoob">Runoob</label>7 t& _1 G* b& e9 W0 f
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
. H4 n7 D4 Y: y8 | - <label for="google">Google</label>
% L$ s6 t7 }/ j* A - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
2 |: z4 \" l) ]7 ^ - <label for="taobao">taobao</label>; |) h0 e; |2 {1 h: H/ L
- <br>- r/ A4 _5 J% ?3 c
- <span>选择的值为: {{ checkedNames }}</span>
; V' u3 K1 Q* @9 I4 U - </div>5 d) x2 W' N7 s0 H7 ]
- " }; v+ N7 h$ o4 v4 l7 `7 ^
- <script>! [: K! p2 G3 u1 J! e- J9 z3 T4 }+ ^
- new Vue({3 z4 U, s$ I$ z' v! P
- el: '#app',* g, E# H- G4 Y
- data: {
6 e, ?' n6 j2 G; U! X* k3 U8 a - checked : false,
5 D b9 m% X3 A- {; d: n& @3 t5 T - checkedNames: []
5 m7 A7 W: R- k, \& g. n/ _ - }
$ N+ {8 X$ F/ I, Z7 ` C% {2 _" x O - })- |4 S" M9 s5 M( ~4 |
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮% m- a& H5 I2 T0 _
- <div id="app">- J3 N* u! |4 I
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
$ P* R. B2 X& z& L* R( f. V - <label for="runoob">Runoob</label>9 `0 }- B" N% a
- <br>, `# t" N$ y# C6 B' y S$ `" d" i! O
- <input type="radio" id="google" value="Google" v-model="picked">- {- Z" e* n0 m: u8 S
- <label for="google">Google</label>
! ?# |7 P% o& H" X& O - <br>1 M$ D. s8 y; L5 f$ b1 W
- <span>选中值为: {{ picked }}</span> Q4 r6 y% c; H) ?. K
- </div>
, m/ S& h) V7 Q& C% L2 I% j6 e -
( Z; ]' `7 f6 c: S8 i9 j - <script>
0 n, ~6 }" N" `& M- {( s - new Vue({8 L; v1 c, P1 A8 U/ C
- el: '#app',
9 U4 T% d$ `+ K* k8 a - data: {6 E7 h5 ^6 W: |; \+ d- E- N5 O
- picked : 'Runoob': ]" }/ e9 I/ t1 x5 s' j5 ~/ `
- }* X$ R9 o0 m" c g- s9 U, N5 ~
- }): O- ~3 W- x- t- Q- b
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
, F8 q, @! S# |: L. x- <div id="app">
7 f. b; B" n$ w" r - <select v-model="selected" name="fruit">; I1 E' j" {& ^$ m
- <option value="">选择一个网站</option>
6 \9 e+ O6 z$ L3 _ - <option value="www.runoob.com">Runoob</option>
6 d$ S ?" T% L - <option value="www.google.com">Google</option> P+ b; b; P: H$ Q8 g( F3 t# P0 M
- </select>
( ^5 P4 Y: T; q# _ -
$ ?: l' {5 Y* f' C) c" _$ y- T - <div id="output">
! F1 D$ u( b. w" _3 g& B - 选择的网站是: {{selected}}
1 [# R* t& ], z+ C" U - </div>
7 F" ]9 F7 b& v - </div>* {8 Y, G/ _5 B1 X. e0 M6 n! h
- & r) H' b$ D5 H" |6 H8 t( s+ L+ i
- <script>
! A) j* {& G, C$ C. [ - new Vue({
- M2 o* ~6 m( s* a: D! G" C2 E5 Z* d - el: '#app',, o8 ?; U! ]/ m( l' b
- data: {1 F: b& E( `9 u4 }. H0 C- v2 g
- selected: ''
& J% U9 W( n. e1 x; i; A! Z. Q - }
}$ r9 w ]9 T) A8 p" p% ] - })
( U5 H; x. I$ c6 s7 x - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
( N* h, s+ e2 t- M) _; ?" M1 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({$ N/ J u* ~2 T; G: K
- el: '#app',$ e9 s0 E: }7 |) o, a2 L/ v
- data: {
( e( j, g. X W: A. U2 x$ |" S, ^ - checked: false,
! k! ?+ h* a* T6 }4 Q - checkedNames: [], j/ o! i6 d% J H- ~7 O- n B
- checkedArr: ["Runoob", "Taobao", "Google"]
* Z# n @: m0 ], ? C - },
- A. Q! o. L/ ` - methods: {
8 K1 E0 x5 H# i. ` - changeAllChecked: function() {
4 b6 p7 L4 v. g) l2 f J& F) k - if (this.checked) {' c" ]. U% R' R4 j4 X& T
- this.checkedNames = this.checkedArr
8 o* B, C' h+ k3 |( j - } else {
1 A2 ?6 q+ T( ? B# P) {8 T; o" t9 | - this.checkedNames = []* C- g4 J6 \% [' I
- }
1 i3 R, e; B/ d d9 {' `/ ^, g - }
( M. N1 e. J# H - }," k& `& n, ^ y! D: R: d: m3 p
- watch: {
. g* b o* M9 O$ d. W3 R - "checkedNames": function() {
" R( k( V3 I2 y( b3 S: ? - if (this.checkedNames.length == this.checkedArr.length) {# l! ^/ g! L7 |6 u4 W
- this.checked = true
7 \ i& A6 R8 n- j3 {- V5 U& p7 q - } else {
) S6 B1 S& R" a - this.checked = false
9 ]8 M/ K: k" b/ ?3 W9 ~ - }4 d# m$ g! P6 B* G! V
- }) F, i4 r# F1 {; r- v/ K, w/ T
- }
: _5 U# C. {, n6 n/ y* l - })
复制代码
- O+ u: w r$ \7 i# J+ u7 p
7 B/ C! H0 V: E5 t2 ~- w \$ V
8 H! H5 U5 m7 U N- H. c8 M
* _7 O6 n# U" t1 K+ \" C8 M/ r6 X# m( c d5 O
/ w. U# v- m! G: V9 E- E; Z" |
W2 D3 o/ G# Y9 \. U m2 T- i" [, h& V0 ~% J6 f9 u8 p. \
|