这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
6 H! K# |, K' u7 E- <div id="app">7 L- I$ x/ s+ D; J2 {2 {
- <p>input 元素:</p>
3 Y' Z7 U, M# |8 s$ Z - <input v-model="message" placeholder="编辑我……">. Y/ i( x+ Q" J8 o+ ]
- <p>消息是: {{ message }}</p>3 w9 {( }" u3 o J
-
- T) S+ d+ a( ~ `' |' L* [ - <p>textarea 元素:</p>2 S8 v0 g8 ?5 C# g
- <p style="white-space: pre">{{ message2 }}</p>
: F- B: T8 l* |$ U4 Q - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
( G$ N/ ?" P; f" F - </div>' Z& J; ?% z- c
-
! u! }2 w, W" \+ R! ~ - <script>
' H* i# h6 A6 n/ u - new Vue({1 r6 q S* |6 W7 w1 R5 Y
- el: '#app'," a! g2 M8 B% G& I
- data: {* H3 a; f3 j8 l$ N$ `" x' p
- message: 'Runoob',# i: j0 f! v. ?$ I i' k
- message2: '菜鸟教程\r\nhttp://www.runoob.com', A2 n% b: G% ?" @
- }, z( _& f4 s( q9 Z% X
- })
/ z/ g. |) e& m b' u- U7 I+ l - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 1 B2 b" a% N0 p; Z2 o! Q V
- <div id="app">
* z* ~( l5 N) A) e, K - <p>单个复选框:</p>
0 v/ e" t4 t6 O P0 @3 P+ `. O - <input type="checkbox" id="checkbox" v-model="checked">
3 n; F0 n) L8 M8 J1 i- | L7 D9 [) z - <label for="checkbox">{{ checked }}</label>) i) r% ?# C! m5 o1 U) r7 S
-
/ L+ [0 x$ b+ d8 H% L1 _2 r - <p>多个复选框:</p>
! k7 X0 O$ P6 W2 e - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
: x- X: h$ Z" `, n - <label for="runoob">Runoob</label>
7 S/ j. M' h" @ - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
: T$ Y# N/ s- q - <label for="google">Google</label>! i: y; v$ E, ?/ j, Y. n
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
- ?( W. i, b: W5 f) O K; } u - <label for="taobao">taobao</label>
2 e( f- W; g0 P# s. [ - <br>
5 d w( [5 s3 j. Z: f8 j - <span>选择的值为: {{ checkedNames }}</span>+ O" z. c' Y- `6 k
- </div># I c# m" T' M# ]" c
- 3 v" ?+ |2 j* C6 P8 { w1 A
- <script>
- ~5 Q5 i: \: u% N. A/ K - new Vue({2 O& r+ a( [( d" G/ z' ?0 O
- el: '#app',+ ^! |2 ^' _( t1 _
- data: {" s S2 Y2 \7 t! r8 M! `, Z
- checked : false,* v$ p6 W3 U0 s' S( k% b
- checkedNames: []3 q s1 k' s, w1 s2 Z
- }2 o) N/ {7 s) `7 I
- })$ Q- r2 H S7 I3 `* J
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮0 r. s' c- K7 H" @6 N r$ o
- <div id="app">
0 B4 v5 u! I: W" n: b2 p3 ^% Z5 ~% I - <input type="radio" id="runoob" value="Runoob" v-model="picked">) J4 Y# J# L) K; \
- <label for="runoob">Runoob</label>5 G z5 i V6 A5 T; ~) J7 \
- <br>
/ L t, ]3 I( P P - <input type="radio" id="google" value="Google" v-model="picked">
: p& H" n% ~* ]7 b% d) J7 n O! J - <label for="google">Google</label>
k% I) E" l, K8 g# s - <br>
2 C, Z1 v1 l1 o" w7 k - <span>选中值为: {{ picked }}</span>" }; h( i0 F& P G- L
- </div>
1 A, k/ R j; ] Q& } - 3 r+ j K( i' Z0 n0 Z) y, K
- <script>' z" m8 k; B7 y, v% r7 H
- new Vue({, Q# I4 @ b" B+ _* U7 p; s
- el: '#app',3 l8 _ x# }5 l. @; w3 s5 U7 v
- data: {+ n0 T! v0 P" Z2 B- I0 a+ R
- picked : 'Runoob'6 ]2 |! Z* c+ A2 A- C' r
- }
9 w5 Y& S% q" M. J% m( e3 C - })
" ]* T) s- ?/ }2 W: B; Q - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select3 z5 Z9 h2 L- O4 F0 x# r
- <div id="app">
# f+ Y7 T( W$ x. B* y- b6 L - <select v-model="selected" name="fruit">
5 U5 N( D3 x2 Q1 K; s6 @: D - <option value="">选择一个网站</option>
$ z; g5 e6 U' n E) b - <option value="www.runoob.com">Runoob</option>
6 h& S/ ?+ ?1 g( s6 a - <option value="www.google.com">Google</option>
. A2 J3 \2 r# X7 ~9 N9 c - </select>2 R/ ~* p( I# Q
- I1 C( @( a) q0 l: g, I4 m3 l
- <div id="output">% }7 ~7 t" y' K* o* o. \
- 选择的网站是: {{selected}}# u' F0 @4 p' [# y; S, q( E
- </div>
; w( S9 V" ?7 X1 ` - </div>, `( \5 y( R8 R. s7 h* w* k
-
8 U; k; ~- R" c0 Y3 f: j+ z" ] - <script>3 T. ^7 ?- b f/ v* _0 ^
- new Vue({9 G3 b5 \: J5 E5 n
- el: '#app',
0 M- A/ i5 ?# X- G; ?3 e3 X0 n - data: {7 l" }2 [" O {: `+ s: m) s, D6 `$ _
- selected: '' ' f0 D" j5 S6 Q& O+ Y$ l
- }
; _8 N( n' y7 D* }: U1 ~ - })* [5 |0 X7 u2 _4 w& o; w, |
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->: ], {8 {* m. j4 y u' f
- <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({
! O3 D0 E: j- _4 ~ - el: '#app',
- z0 u: y# Q% K+ m' W. T - data: {$ |" l8 C/ r9 K& A% ~6 F% h
- checked: false,
7 ?0 v- A0 h& }8 |3 i& M - checkedNames: [],
! j3 |# w: L" _! w; e8 u: S - checkedArr: ["Runoob", "Taobao", "Google"]% D2 u. c/ R! @" p6 c. ?
- },
- i9 ~+ g. L8 a) _; A! t - methods: {3 t8 e) O1 W4 x3 D" K8 U5 _6 \( @% G
- changeAllChecked: function() {
- ]8 d' y' W; m - if (this.checked) {( G/ E; m- `. C. }$ `
- this.checkedNames = this.checkedArr( X! \) b' y2 i
- } else {0 F5 v. l0 d6 w2 \; r- a
- this.checkedNames = [], A8 A/ r- T7 u1 y2 a$ \
- }2 w" g3 f% K9 `# }
- }/ G( G/ M9 M( j! @5 n
- },
' {# R* |% }9 X, C7 u) F; T - watch: {
* r" K2 C: A% O" p/ [9 n4 m - "checkedNames": function() {
* k5 R" D! g3 n) i" y; U - if (this.checkedNames.length == this.checkedArr.length) {. Q6 o3 X* c* c6 z( C. t6 v7 P
- this.checked = true
+ d, ~1 i3 f1 W4 ~' h1 \7 N! s/ q1 I3 R - } else {
2 R" b" e) G/ Q4 C' l U# Q# g! z - this.checked = false7 Y; {' t1 @0 `7 {9 Q( B+ a: w
- }
5 W7 j' e! j" \/ e - }3 @$ U2 M8 t7 y2 |. F
- }+ u/ E+ C/ V0 o
- })
复制代码 , c. r) E8 n8 Z% Q$ N. k4 |9 x, v
& ?- J: }! |- f" h/ v W2 G
' N4 {+ A6 W; O+ ~5 _8 U8 T2 R2 b1 {6 O. Z. O7 ?& i7 V
/ H0 a* g1 @. ?/ ]' H( X' p* E! A9 G! @) U! K9 T) e
+ j! ~9 E' T3 o# q! F
$ C; M/ v$ s+ o. ^) v5 Y: t8 X |