|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: : n. p6 {7 R+ l/ _; }# V- r9 x
- <div id="app">
1 I; ]7 j9 l5 ~2 p) S - <p>input 元素:</p>7 \" z5 L7 F9 p) O+ m" @
- <input v-model="message" placeholder="编辑我……">
5 p. l7 Z. w* b% j* `: P - <p>消息是: {{ message }}</p>
, q& k/ C% w# ]) F - 3 N# G' p$ d1 d& y G
- <p>textarea 元素:</p>
/ @$ B! L9 u F# Z% K8 t1 ~; z - <p style="white-space: pre">{{ message2 }}</p>% o6 k) n1 p2 d: K+ D0 s+ @7 j
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>( e' ?7 T- Y$ O3 `* p2 ?
- </div>
: M& c N2 k) x -
0 K6 Y# r% Y9 q5 \# K - <script>
( P! ~( X0 Z$ F0 B3 E - new Vue({1 n. L- `" V/ g0 p
- el: '#app',
5 W( V" H( b4 b9 v6 i" c' M$ ]! E - data: {7 B2 F& x _- \
- message: 'Runoob',
1 j$ o% G' U/ h3 E2 k/ A8 t* Q, a0 ~ - message2: '菜鸟教程\r\nhttp://www.runoob.com'- C' p- Y, f$ B* D! E
- }$ K3 x, _: N( a# R
- })5 C: ]) v. u- }; e% Z( \
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 8 k3 ?6 e" ~9 l3 D* ]* X
- <div id="app">. U) |- K8 D6 M& o$ ^( A. R
- <p>单个复选框:</p>6 V) l" @' Z8 D" I2 c2 D
- <input type="checkbox" id="checkbox" v-model="checked">
E; Z5 \9 r0 L0 ^3 j1 H, ~ - <label for="checkbox">{{ checked }}</label>
0 i2 q) @! A/ U -
2 m2 }5 ]# N2 U2 x: w7 E& Z* }+ J- H* \ - <p>多个复选框:</p>
. c6 L9 ~# v) C6 ?! T - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
7 j$ `! X0 M6 l# Q0 x, q - <label for="runoob">Runoob</label>
: y: R) q/ E+ N# k- p7 |& O/ D! X - <input type="checkbox" id="google" value="Google" v-model="checkedNames">" T9 S2 M2 y, U* [2 p5 g
- <label for="google">Google</label>
; [0 Q0 n% U1 ]4 X - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">+ l, R; n) a. V( l7 F- C- H
- <label for="taobao">taobao</label>! }* a; D L K3 X: v; g' l: K9 x
- <br>
& v( {) q1 Y9 F2 k$ y4 Y: \ - <span>选择的值为: {{ checkedNames }}</span>5 T9 C, A1 G/ u% p* y8 ^9 s1 Z( Z8 V
- </div>) f. j8 ]+ n% y& y6 c: O3 t# h
- ) K* q* Y$ e- [7 v) [
- <script>
) }" o( U, T6 {: ?8 H" Q. ^( @6 R - new Vue({
8 l7 T* ?" u7 m - el: '#app',
! i4 s5 k7 T2 f3 n( i - data: {
1 I4 k7 ]- Z) k2 ] - checked : false," x0 H# ` U; [) e
- checkedNames: []6 U' D5 ~* ?. B2 B
- }
: ^! B1 i" I9 i( U/ t% @! p. H* \ - })) p+ g2 B6 w3 e2 O+ v
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮$ s a% d- c! O
- <div id="app">+ n. G) ~. q3 i+ U& a7 H
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
! o1 J7 t1 Y; O/ B - <label for="runoob">Runoob</label>
, a6 o0 w% b* U- s" g% H - <br>
# J9 G. @5 a, d( K$ N9 N9 J$ C - <input type="radio" id="google" value="Google" v-model="picked">
# S+ B5 i! i8 r" s! R/ s5 |4 Z( M - <label for="google">Google</label>
! h: l4 W& U4 c+ B- \! _! p - <br>% E6 l# @# ~( Q
- <span>选中值为: {{ picked }}</span>' [6 a: R" \' }7 P+ _3 [4 ~! m, W9 j
- </div>
# U/ K* e4 W9 |1 {8 ]% f -
3 h: ?0 j- L Q, t7 v# u3 E* ?5 s - <script>* F3 o8 ~2 p( A* m1 Z) Z4 b
- new Vue({
: i% |* ]/ J' B# B6 |4 S - el: '#app',
; U6 i6 l/ W* S$ Z, U3 m - data: {
7 L: V' U ^! B5 e6 t& g - picked : 'Runoob'; I) a9 J5 b6 e' Y$ x
- }
4 p, N) R+ z$ `7 A K& V; e - })9 y$ C P. c: C) |% w6 m2 S/ R# W; s
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
: Q. d( ?! M. O* b% {* {, W6 P- <div id="app">
& n+ W1 u+ n4 d. n: q - <select v-model="selected" name="fruit">
/ }/ r- `2 ^" O! H, s - <option value="">选择一个网站</option>' }0 ~$ e/ D2 l5 y6 [) _0 h! s7 f9 @; a
- <option value="www.runoob.com">Runoob</option>. O/ W$ L& S6 x- G1 i5 q
- <option value="www.google.com">Google</option>
' R: S6 _. J7 E1 d' A4 Q2 ~4 ` - </select>% A2 U: ^) e+ z8 w5 Q- n' t
- 5 X4 M. c9 o. c# |8 |
- <div id="output">( n; P7 p8 N4 _
- 选择的网站是: {{selected}}( P3 u$ z9 u( ^6 @
- </div>
+ L. X' z8 C$ h5 ^' V - </div>
: q8 E4 V6 |- ]2 ~3 _0 }0 _" [ -
+ D+ M6 u1 p8 R$ J# d - <script>
3 {, C& u5 |: f# @+ J( ] - new Vue({ Z0 T+ N; E* q! z m
- el: '#app',9 C8 M' X. @1 O- Q N
- data: {
, y, m* c. v% @" ?& T - selected: ''
! D- |5 ~9 s* T# S2 m( A- p - }
0 |# ^6 Y* T, W [# N; N - })! T' E8 ]+ r$ P8 e0 o1 J2 d
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
7 ^7 |$ S) J6 x4 I, d0 q+ w - <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({' t) F: l9 d$ W6 s2 E9 n5 |3 D- U
- el: '#app',/ K& s$ T3 h8 d S7 M1 `$ W
- data: {
+ E3 [4 ~9 ~7 }' N P5 z1 i - checked: false,
\9 n6 s2 L: z0 {8 C/ }! P - checkedNames: [],
( O: h- c, S% d# {4 l7 ^ - checkedArr: ["Runoob", "Taobao", "Google"]+ U) `8 Z$ V6 i' A0 |( k
- },. n# N& Y& I3 q. w
- methods: {) I/ [1 H; S. C. }8 t
- changeAllChecked: function() {
p: \, T! C4 b, L+ j2 a - if (this.checked) { {$ `7 L$ S, a0 K5 I. [6 a! S9 n
- this.checkedNames = this.checkedArr
) |( T' `5 Q5 q5 }( C - } else {
% f0 p, f9 p J3 g) p% ` - this.checkedNames = []
$ e: _# u) P$ x! [ - }4 n4 X( s9 E* Q5 U
- }$ h3 E* @- h) }$ J. Q" ^
- },) F) G5 [/ p0 {: K
- watch: {
# `. p0 ]. K- F) u/ X+ a. o - "checkedNames": function() {6 R# _" ^# c! o* @( W
- if (this.checkedNames.length == this.checkedArr.length) {7 x, n. U! M. j8 a
- this.checked = true1 T/ x; B0 {0 M! t
- } else {6 y2 M4 |: W8 e
- this.checked = false
! c+ x% v8 Y1 ^* m$ J - }
1 f: v R- I% |. V% f) f* y - }
: J& e- x% F; U- G1 s - }% |5 t+ }' K$ j, n. o' P
- })
复制代码
2 b1 k; C& ~( r8 b/ _
6 x* E1 n5 c+ V% U
( U8 j" }& [) K$ S# h) K5 f
# ~/ v. o+ Z3 R1 x
5 U1 F3 W, o# K- A8 F" q% K4 m. L' V1 D2 O
9 L% a# S8 ?! f, Q7 v: R' B/ I# a! o
4 t. D; @' u8 K! A
|