|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
0 @% g& D9 p( E. B2 G3 ~6 P9 w- <div id="app">! ^# F+ S/ A/ e. h7 I0 s: z
- <p>input 元素:</p>& v6 Q- G' B0 X, Q: _( a) g
- <input v-model="message" placeholder="编辑我……"> r) o+ o3 W+ _' W$ q
- <p>消息是: {{ message }}</p>; G, R! w l% C. \$ W
-
: j$ d7 O; Y! V. M4 {& [1 |3 z7 v - <p>textarea 元素:</p>9 m& {1 W; A/ h7 K
- <p style="white-space: pre">{{ message2 }}</p>( j& x" ~. ^+ @) n, e; f5 U
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
8 M# C0 N! |" W* Z) D( A - </div>( ]! U& U# Y9 h6 u5 g" u
-
6 O; |( |3 D% x1 ?/ ^ - <script>
8 J. D% c4 e( a% a - new Vue({
, Y3 E4 X* p% x7 O - el: '#app',
) x& @& a( ]( E3 Z9 h; z - data: {) F/ M5 R, C. q, t
- message: 'Runoob',9 z9 e' r6 d+ F/ J
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
% p8 Q/ Z4 M# b( R - }
u' t: C) [* N6 r3 k5 D - }): z# y& e) u) w, L; r/ R* C) K
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
3 x, }( U1 U2 C3 p6 T! T2 K- <div id="app">6 k: y3 U# C# r# l4 v% A
- <p>单个复选框:</p>
g: _1 j0 A* D r ]9 O - <input type="checkbox" id="checkbox" v-model="checked">
8 m2 |1 F5 z# Z3 w; ~8 @ - <label for="checkbox">{{ checked }}</label>- }$ U3 y. P! \( J8 `
-
8 T* m3 [* _- o - <p>多个复选框:</p>5 K6 x2 s9 K- m
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">! S* }4 m5 `/ \7 J' n
- <label for="runoob">Runoob</label>
2 o) ?' j! S1 ^( a# x$ a! x - <input type="checkbox" id="google" value="Google" v-model="checkedNames">) r+ C/ J. j$ }- Y% S
- <label for="google">Google</label>" L4 N" P' f! s( |: G
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">! c' k( I/ z. \0 z& @6 Q: }1 b
- <label for="taobao">taobao</label>. `4 {+ K4 F( f0 H9 g
- <br>
) L1 @; I% G" E3 p( P - <span>选择的值为: {{ checkedNames }}</span>
/ n# X. ?- r) |1 \# z4 [( |% [ - </div>( A3 t, y. G0 V5 w
-
! A+ T0 j# N3 Y g2 w - <script>2 N" `. P& o. |; u5 |: i. W) @
- new Vue({
. q" n' k. k, U" Y8 Y - el: '#app',5 l5 a3 i. z3 Y- `
- data: {* _3 P8 x3 n% c1 x
- checked : false,; ]) c' e/ v2 Q7 x' k& H! l/ @
- checkedNames: []
" [, A: ?7 W5 N' a- X - }
# ^# @6 V+ i) r# H; L8 Z! a5 }9 p - })0 @! e$ h: X7 d; v
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮/ |2 [: H0 V. Y
- <div id="app">
. Q z1 v2 H N0 O E* I- t - <input type="radio" id="runoob" value="Runoob" v-model="picked">
7 G" X+ G8 I. ?% b - <label for="runoob">Runoob</label>. Y [! L) z6 _9 [; H2 r
- <br>
5 `) y0 h2 D) E7 t5 [8 @( I' O - <input type="radio" id="google" value="Google" v-model="picked">- B1 w1 r- Q8 L4 k! u' z6 G6 |
- <label for="google">Google</label>
4 _# X0 v# k | - <br>- X k# U( v+ R/ C$ r7 ~
- <span>选中值为: {{ picked }}</span> v2 v. R# Q0 P" L* f* h9 f
- </div>: @$ _+ Z0 o- I9 t# {
-
5 V+ F' U6 B: q& L: I - <script>; k& r* y0 l J% g
- new Vue({) @, [1 ~4 x, M
- el: '#app',
3 x9 g- s/ r9 l/ m - data: {
( V2 _5 J; k2 Q6 z7 N - picked : 'Runoob'
) N( Y P9 B, N - }
: h( t1 B" K: p0 d! {' F8 t - })
/ T8 B# c4 c) S - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select5 a0 s: M; V3 Y' y! M
- <div id="app">
! E1 Z8 _$ X0 y+ q2 h( y - <select v-model="selected" name="fruit">/ S( j1 D u: b. F* R
- <option value="">选择一个网站</option>4 d. N# ~3 f" \+ j6 Q( j
- <option value="www.runoob.com">Runoob</option>6 c$ S' Y4 `: G/ H& f% h4 N# E
- <option value="www.google.com">Google</option>
8 M: r0 r2 {. f, O; z3 I - </select>
) K, T8 E' ]0 _- _3 b- [ i! p -
5 p7 k7 y+ r4 b x2 j+ C2 `+ u - <div id="output">1 g9 b' q) h3 ~: N7 ^/ g- R: |) g
- 选择的网站是: {{selected}}8 a7 C+ ^9 R7 U0 C# P' z; U
- </div>. [9 ?# ]1 s# |: @( \
- </div>
3 }' l* C2 ?" t2 ^: o -
+ a* g! A! G2 Z8 ~ - <script>5 }. j8 ?) t* D. b+ R0 A
- new Vue({* P) f& n) \( M
- el: '#app',
5 ~9 [9 N8 R2 B3 r0 }) G - data: {0 F) U7 G+ e; L C
- selected: ''
8 O |$ p; Y0 I' g) ]2 ?4 I - }+ V) `% g" a7 W' y% _$ V; @2 i3 `
- })
n$ y. ~- s8 a1 [- s' P - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
+ X, m6 V6 \" U2 h* H - <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({) x7 z( @, l. q1 S! a
- el: '#app',+ Y5 l& }" {" |) T; P
- data: {
/ l8 j7 M, W' O - checked: false,
- w F6 W/ \8 v$ j5 y- C/ ~7 { - checkedNames: [],3 o: T7 y2 r# \
- checkedArr: ["Runoob", "Taobao", "Google"]
0 G6 Q: ] h6 O# s. Z# M! r% w - },
- {( i4 z ]/ I! h* I* n) e+ E - methods: {% _2 @9 w# B* ?) _0 s
- changeAllChecked: function() {
- x$ {3 Z& h; F' K9 B* _ - if (this.checked) {
+ y1 z( g0 O# f. P$ y- ?. c9 s' S$ j - this.checkedNames = this.checkedArr$ e) B6 B K- \5 K
- } else {8 L6 r" d7 @7 n
- this.checkedNames = []
* k7 T7 l9 ] U* ~ - }
- w4 r$ E" S# K( O# M - }; u8 V F8 ]- C' q, ]0 ~
- },
9 Q0 h3 s0 q. M) S; b - watch: {
2 r0 T, E! K+ z r C% h. } - "checkedNames": function() {6 X' r x2 ^( D. v
- if (this.checkedNames.length == this.checkedArr.length) {* A; i$ j! J) [
- this.checked = true/ ^8 R9 v9 z- ^* N, k& j& C& R1 J
- } else {
4 ~! ~3 O% H& b - this.checked = false r( }5 A% z0 i% ~. K* v' }- `6 N3 E
- }3 N) |. U4 F7 ~. G9 m- b
- }' f7 U8 q$ P5 t3 `, ^, y
- }
1 }+ p# V* i N1 @0 P - })
复制代码 6 B% @ r" o3 ]$ _. v5 e, E. o
9 ]$ M# C3 a& Y) I1 R, n6 z' C, T8 R, c, Z& Z
0 V f m$ @: l5 V5 \# ]
- r1 i# p( c4 r* X$ J% L2 Q9 P* k, p9 h
/ a: A+ w5 G- K4 J) F- N3 y+ G z" R( E, t
|