|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 9 m/ L) x u: l* g7 V! e' ^
- <div id="app">
+ ~' |; c# A; `* ?3 D8 X - <p>input 元素:</p>8 p1 _: F# a5 @* |
- <input v-model="message" placeholder="编辑我……">
1 [$ ^1 z1 m9 }1 z9 v1 g, j2 h - <p>消息是: {{ message }}</p>
2 K2 O& u- u+ g4 x5 m6 v) n. d/ N4 R -
! N$ ~2 K$ y7 _! L0 d/ K' V - <p>textarea 元素:</p>- q- I9 P" }8 `1 m
- <p style="white-space: pre">{{ message2 }}</p>9 T1 C Z# t5 |4 k
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
1 e. t1 i& A" \' U - </div>
0 w% [# p5 ?5 X( I - 8 s) e$ z4 ~+ W
- <script>
* k& Z7 V0 U, ]* B. G - new Vue({
2 h: D1 `# C& b3 a, ~ - el: '#app',: K% M# M" B: n0 f" d- a
- data: {
$ ?8 w( X; R( t. E- }5 O: k$ J - message: 'Runoob',5 V# R$ ?" [% \0 W6 V1 ^
- message2: '菜鸟教程\r\nhttp://www.runoob.com'; p$ }' \, P6 Y# d7 C# n
- }
, g. {. w5 h0 ~' @- }) [2 D - })8 A' W; H- h& D! [8 G
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: ' P8 p, B! _. r f Y
- <div id="app">; D- B8 e7 Z) D6 ~. D3 e! r7 @& _
- <p>单个复选框:</p>
- E" N9 x; Y& D- k: r6 Y: F; K - <input type="checkbox" id="checkbox" v-model="checked">( k! D/ M2 W2 ~# h2 A$ ~9 r
- <label for="checkbox">{{ checked }}</label>
* S" A) G7 w: _2 s ~( o" v - % H8 A3 Z. G1 d
- <p>多个复选框:</p>+ T2 Q) Z9 W* T- E1 f
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
) s: I7 W9 j: y o* d - <label for="runoob">Runoob</label>) |% l9 W$ W# L; Y) n
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
% Q; O( o( \8 H+ s# Z+ U - <label for="google">Google</label>! F# W; ~8 L/ a& h( q
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">+ g0 {& c- x% G/ S" A
- <label for="taobao">taobao</label>( Z4 x' U* z K9 X( O
- <br>% i$ @# Y0 D6 K+ `! h* C. k: n* z) ]
- <span>选择的值为: {{ checkedNames }}</span>) x9 ^! J! a9 \$ K8 [
- </div>
7 G! F/ k! e; J8 L3 {5 B -
3 {3 n; Z# U+ P' L6 D - <script>
- }( ~6 u* |) f+ _" {1 P - new Vue({
9 P6 L# x8 @2 J: m) {' ?/ q2 D - el: '#app',0 L e& r! p# }3 B$ P$ {
- data: {
5 C- E1 b$ x* @ - checked : false,
8 a0 x. V7 f/ F: V' L+ A# B - checkedNames: []7 f" H2 i: K4 E7 o
- }5 _) @! V2 @; g* v- }1 F5 b! z
- })) c- T! ]8 X5 j1 S$ M
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
3 J$ q2 b8 [# _1 j0 l+ Q# s4 A; \- <div id="app">0 R9 }% Z. v+ O- f: j
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
9 i& q$ p6 j' u2 j) f) u4 L - <label for="runoob">Runoob</label>1 N' k- N3 i4 z" l% w. q
- <br>
4 \' X% {- F7 o2 \- E - <input type="radio" id="google" value="Google" v-model="picked">
4 R( E1 t( ]" w# x( S# B! p - <label for="google">Google</label>6 t& l5 X c" h; B. B
- <br>
0 E+ U( h* u2 F# Q# x - <span>选中值为: {{ picked }}</span>
- J' r+ J6 h9 B - </div>2 p8 }6 M* t. h- {( M
-
& Q* T3 X! k! @2 b0 e! T% _ - <script>, u: o- l, q3 p& V) I K
- new Vue({
3 D5 k0 Q5 F( }( _ - el: '#app',
) L% j- A, i( M' I1 U - data: {
- ? c, K1 o" @ - picked : 'Runoob'
+ \$ G% o: T( M - }1 O+ Z$ v4 T6 F, T3 V9 i8 G
- })
0 t' ]: ~. [- r0 o. l, Y - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select" ]5 H$ A5 v9 C2 s# l' S
- <div id="app"># e1 Q6 Q4 o; I& ~' Y& K! C
- <select v-model="selected" name="fruit">* Z/ O; \- k( w0 [
- <option value="">选择一个网站</option>
7 d4 m) S D9 c - <option value="www.runoob.com">Runoob</option>. L1 k+ m, O9 v0 Z( V
- <option value="www.google.com">Google</option>
$ R2 u% a, W3 y! u! x2 S/ j/ k - </select>7 F1 W7 `" }% Y0 v/ t; x
-
9 N- S1 g( N) S, `3 h - <div id="output">
0 X" k1 j2 x e$ M, y. n - 选择的网站是: {{selected}}# ?3 Z. j% J1 w6 v% V
- </div>. V1 N h# |5 Q$ l- I& K" J' [5 M, B2 R7 Z
- </div>
) e5 E: G2 w$ T! q) Y. t1 v - ! y1 O+ L5 }7 |+ v
- <script>
+ |' ^. j8 G' n! a/ T" n R$ g - new Vue({6 O" y/ Y) d/ H2 ~
- el: '#app',% ^ i; @& D' m* X% e! R
- data: { p* \) U" P6 k0 f" f# `
- selected: '' : h) J! w+ S4 C/ A0 s/ r, T
- }+ @4 r: A. c! e" g/ f
- })5 s# n R$ C& S
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->% j. k9 p3 m, D l9 k
- <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({2 l0 U$ g* U1 s1 b* Q7 Y1 u3 I
- el: '#app',
5 h- P* g7 W( N% L- Q& \ - data: {
) Y& U, T, f, U$ { - checked: false,; Z: O6 R8 s2 ~
- checkedNames: [],; O/ M# J# S, ~2 W9 ^8 c
- checkedArr: ["Runoob", "Taobao", "Google"]8 P, \- N$ K; e; x" | e( a
- },0 L* h5 F$ l7 z+ f. R" a7 i8 V
- methods: {' p# ?7 V9 u& m* Y
- changeAllChecked: function() {( c1 h. |3 W, h4 X- V1 m
- if (this.checked) {; {3 [8 a( a. x$ P+ ~
- this.checkedNames = this.checkedArr
0 P0 O5 Z" A* m9 a; L' F - } else {; N8 u; U* N8 B. }8 |: ?
- this.checkedNames = [] i7 |& Z N/ |8 t# b O
- }
; m$ k$ R* _: b0 Z E - }0 x5 d3 v! Q' F" G0 o; T
- },
, ~5 i$ A, E, n, e - watch: {
9 E! y8 X# d L( e0 ? - "checkedNames": function() {) q% m$ M+ f. p5 b$ {, n* d' U9 H
- if (this.checkedNames.length == this.checkedArr.length) {: R* K1 b+ `/ }
- this.checked = true: M/ ?) O/ H" k; v" [- j
- } else {: n9 a" o8 [. [4 U
- this.checked = false1 G% R( T& d/ }5 w9 \
- }& ?# N9 w& }8 b1 L+ z5 k
- }2 u" V! K; g2 Y# ~& D2 G8 p& p
- }7 S1 R, W/ i1 {) l
- })
复制代码 8 B0 ~7 p! h b- L8 ]9 q1 q
% B" e# H6 c. g* D
% W0 ?: v, d R) B6 K/ q( e) N
* K; S7 S% ?7 q) ?$ g
" W) a( U1 Z: X6 e4 A" W2 I1 t% r6 x% e2 W1 t# z
) B, S" D$ _( b
# N3 V6 d3 {5 ]; t9 s |