|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
$ B4 [# h* ^' [ d9 n6 A- <div id="app">5 t0 z' ^1 b, V+ Z }2 A, D
- <p>input 元素:</p>' Z+ y5 a2 H& N' n
- <input v-model="message" placeholder="编辑我……"># {+ D) o" H7 j {
- <p>消息是: {{ message }}</p>. s4 T- a( r8 {2 H3 V7 w
-
- X# Y7 {' U6 R( @- ?' i; m - <p>textarea 元素:</p>
0 H- L& n# p) f$ W" A' {! I, z1 p2 ] - <p style="white-space: pre">{{ message2 }}</p>1 z: P/ k1 |7 W2 e4 c
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>2 t* v4 ^" ?1 K9 s1 v( q& ~
- </div>
9 g" b/ i% x% d& [ -
! a: ^9 D1 j, P; F - <script>& j/ s# \0 }! a4 c+ P* J- ~
- new Vue({
. Z" O2 F" ]! Q4 U5 p - el: '#app',9 I; B# S. k$ J+ s3 B
- data: {
! k, l7 |+ N- U/ o) r# u; ]' V, L - message: 'Runoob',! @' l+ a" { @# j# V
- message2: '菜鸟教程\r\nhttp://www.runoob.com' U6 B |5 t8 h# m* m7 A
- }
1 r% `$ r/ \1 Y7 Z2 ]/ \, V - })
/ V) e; s, S |# j! z3 [/ O - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: ) E, P/ i1 J6 X u2 D( x1 H
- <div id="app">
$ v2 _9 H" s' {* T8 y- c* y# q - <p>单个复选框:</p>! H, Z& I' S/ p. M5 F
- <input type="checkbox" id="checkbox" v-model="checked">* i9 c* X- i2 x
- <label for="checkbox">{{ checked }}</label>
5 t1 W8 h. ~8 x0 g& C -
! c4 p" w4 Q+ \3 Y% a; a - <p>多个复选框:</p>
5 ~4 W9 u& {, ]! E - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">0 a( W9 J3 M4 e6 P2 u8 q2 C& z: b
- <label for="runoob">Runoob</label># P) c0 G$ \5 T6 z1 H* O
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">! s& J0 B# [9 D' M* Z. N x
- <label for="google">Google</label>) y6 q- P- [& ]' ~$ _
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">: t) c! h9 J0 [. `( s! U" o
- <label for="taobao">taobao</label>
g4 ?+ w/ [8 }) [ - <br>: Z6 u' b" W3 B) G2 ?6 {! X
- <span>选择的值为: {{ checkedNames }}</span>2 y6 N# N# P) H: L& H6 K
- </div>, @% p8 E- L% e6 N* G
- ) M8 |' [7 h/ K% [) ~
- <script>/ J7 u8 H, P3 n: U
- new Vue({
' W8 }, T8 r7 |8 @+ o# @ - el: '#app',+ S( f& X; ]8 x: s- W% m
- data: {
1 |. Q% H# r) j$ {- Z! Y - checked : false,
2 K/ f5 K; \. d* G7 {0 _ - checkedNames: []
% _$ b" [8 ]1 k& @ - }" J2 e' d/ T: O2 A
- })
8 w, [5 @: d. C - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮# C# X7 _6 [' \ x4 v" W
- <div id="app">! G8 T. j' S% D2 B5 h
- <input type="radio" id="runoob" value="Runoob" v-model="picked">" ?8 p' D- @* ^ v, Z; |, p
- <label for="runoob">Runoob</label>6 U& Z+ Z4 U4 r, U+ H& I: T
- <br>9 u2 c, {" Y2 B2 ?
- <input type="radio" id="google" value="Google" v-model="picked">
2 j9 W1 g0 w8 X0 B* ` - <label for="google">Google</label>
; H7 H6 X" v; [+ F5 O' | - <br>
" Y- q+ t9 s0 J8 N; i; f - <span>选中值为: {{ picked }}</span>
?8 H! R, W* [# v }) Y/ j - </div>
- j7 C( r1 G& f/ `+ b) Y - 1 W- Y7 s7 |- R# ^
- <script>
9 _( h1 \( I( _ - new Vue({
, l' d2 K6 i: X( }8 M - el: '#app',
, U/ `. O, {& v; k9 |- j5 T - data: {
! M0 E: G n' I) Z& B - picked : 'Runoob'& W. b2 q7 l; U- p1 s
- }: O9 _% m8 F+ E7 l2 _( p$ O
- })
9 u O5 \3 L6 ?) U) y - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select7 s. G' }% h& o, S% Z: J! O' ^
- <div id="app">; l9 R% M& o; |+ E
- <select v-model="selected" name="fruit">
0 @: q9 X! ~) T! j - <option value="">选择一个网站</option>
" _3 ^# k9 k0 |, V - <option value="www.runoob.com">Runoob</option>) s c* E& [: y" B
- <option value="www.google.com">Google</option>* b" T; A7 r. \! e
- </select>
) @+ u; p% O. y2 e -
! v, L+ |! v+ T/ Z5 _: C - <div id="output">* X* w/ q! r, M, p- M( e& Z2 ?
- 选择的网站是: {{selected}}
! G" {9 p( G' d# t" A1 b) U - </div>8 m8 K4 n5 T' }# I! x4 j* Q6 K
- </div>5 l, }; Y$ `2 P$ i0 O* i
-
: a: `3 y/ q, k& A - <script>( U" ` S, ~" s
- new Vue({- ~) S# ^7 h7 N2 ^# a- s( G
- el: '#app',
. ~' v3 L2 _+ [ - data: {
. p9 {' e( n7 s; c - selected: '' 3 T: A' w5 s6 W
- }
! y1 B+ o9 d# B0 r, B. R - })1 a* B$ ^& a9 y5 G
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
1 M! {9 Y- D4 c1 i' e/ { - <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({
% q/ B+ u/ Y# _; \2 n/ D: I* b5 @ - el: '#app',' t! {+ Q" G# t2 r3 m6 q
- data: {% y% G9 L$ ?* @+ h
- checked: false,
, ~5 u3 z* Y" u+ ~0 d- |. d - checkedNames: [],
6 s! a6 u2 ^! C6 t- a - checkedArr: ["Runoob", "Taobao", "Google"]
# ?: B3 B# N" [" B) ~0 B - },) q- S p0 D \0 O
- methods: {& W) ^% U' b! }" F/ q
- changeAllChecked: function() {- y& C! @" j$ O, w" k0 m
- if (this.checked) {7 w0 {* U* V' {3 f/ ~9 @0 h
- this.checkedNames = this.checkedArr0 b; e( y. ^+ i% m" J
- } else {8 z' g/ n" v5 Y8 p
- this.checkedNames = []; l$ {* V( S+ U* [2 o
- }
. y3 o: @4 Q. R+ l5 k( D - }
0 `4 N: Q; |: v5 ` - },
; _" r& T6 {6 v: g4 w( T. a - watch: {# K3 v5 `1 l$ c5 @
- "checkedNames": function() {% D& `# k! [) c; d8 F
- if (this.checkedNames.length == this.checkedArr.length) {
. a3 C0 }6 ^& g' h5 E U - this.checked = true
. p- v3 p0 S* j7 d0 S- ~ - } else {
- b" \7 s+ Q6 i$ t$ A% j' s& n - this.checked = false
* e! E4 f3 A# h - }' ~7 `* `* O4 T* B
- }
k( P" j# ]' ^0 ^. }' P: J - }
1 U, [$ }/ H6 w$ l2 P0 M- D* ~ - })
复制代码
/ o: w) a: q, `5 f+ B
6 `1 [$ q) p E* o; B
9 O: o1 q5 [% u5 k# A: d' |
2 e+ E* h/ |7 H9 |3 g u5 Q. e/ a4 \/ q; Z% L3 g
' O; F, Q/ I4 J2 e' O1 c+ s+ D2 ]6 _
9 B; a9 w$ T5 d& y7 g' y9 u V. H2 R: D5 H1 z+ s$ O5 x q' p: n/ ?
|