|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 1 X, E, N% y3 Z9 k
- <div id="app">
9 l7 v, z: C; O. P1 j* ?3 U, ^$ H - <p>input 元素:</p>, r8 \+ R/ y" M+ N/ _1 Z$ g
- <input v-model="message" placeholder="编辑我……">
' I' Z# @! Y4 z: J1 T - <p>消息是: {{ message }}</p>
, n0 i5 g. n" s7 A - ( ^8 h$ N0 N2 V$ h
- <p>textarea 元素:</p>
/ i2 [2 @( o8 M, w. c7 k' B( S& | - <p style="white-space: pre">{{ message2 }}</p> [2 Q$ k& {# s+ E9 S( x+ q. d
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
, a1 Y' O7 N$ m3 P - </div>4 `4 D: Y; B; W& a2 W
- 9 F) C# x& ?1 } H- k
- <script>
4 L/ `8 U% Y, k1 ^; f& O - new Vue({
5 w* m% K: a, x/ Y - el: '#app',
2 i7 C& m$ P) z6 ?( o - data: {
7 D" j) }* {' N4 Q/ Y4 K - message: 'Runoob',/ h6 Z. V7 Y* Z5 o- H
- message2: '菜鸟教程\r\nhttp://www.runoob.com'; x0 n$ L3 l# M
- }$ Z( H) ]; O) j! c4 R
- })2 h) L2 }8 R. ]1 h6 i8 T& w
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: ) R6 D3 m2 I8 ~% W1 |6 K
- <div id="app">5 n# G4 H2 x, d8 [& A& S' E
- <p>单个复选框:</p>, c' q9 `8 q3 e. M( z% V5 p
- <input type="checkbox" id="checkbox" v-model="checked">
5 H8 I! X: q0 ^0 g4 ? - <label for="checkbox">{{ checked }}</label>
- l, }8 ^$ {$ i! O8 i" _ -
) s8 [* W! X U# o - <p>多个复选框:</p>) N: u: _) D/ o9 e( Z- g
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
# W' _2 o0 o# e& n% u" l - <label for="runoob">Runoob</label>
?: X3 W' N" y - <input type="checkbox" id="google" value="Google" v-model="checkedNames">4 v8 O, _# y5 o b; d2 b
- <label for="google">Google</label>) H7 {$ l( u# h+ R& @
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
& a$ p1 E% z5 X; [( f% V9 Z) I - <label for="taobao">taobao</label>9 h4 D2 o* q/ u }% D
- <br>
6 U2 s# z- D6 b - <span>选择的值为: {{ checkedNames }}</span>
% l2 ~8 s2 l# f6 {+ o2 J0 B - </div>
7 `* T7 t8 {1 x& B( M' W4 c2 v -
- H- P6 Y2 s7 Y$ U - <script>; s) k7 k% M L0 m3 C1 Q
- new Vue({9 l, P2 T7 \2 f5 _" ~7 F, A6 w
- el: '#app',3 h; ]" {; j6 `/ r. h( D& d
- data: {+ J! M. B! h0 J) G7 J3 d
- checked : false,: `; r- Z) l, X( u3 L1 }
- checkedNames: []- B p' T* `; b+ }- B* a u
- }; d7 f' v$ G) i# K2 d5 P; M4 J
- }). }4 E3 V9 B, i; g0 x, E8 ]& |
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮' Q5 ?4 m$ U( } M7 O6 v4 L
- <div id="app">
6 q+ A' U0 ?6 D; o0 x - <input type="radio" id="runoob" value="Runoob" v-model="picked">
. N* U! Z. e8 Q! ~5 Q - <label for="runoob">Runoob</label>0 O) X" E7 W/ v1 `/ _' r, q- Y# F
- <br>& ~ g0 z3 S$ [! }. `* @) z: c
- <input type="radio" id="google" value="Google" v-model="picked">0 m! \4 D# r2 s* @0 ]: Q
- <label for="google">Google</label>
| X) B7 h. Y/ n - <br>
w; T0 F8 o6 a( d, @ - <span>选中值为: {{ picked }}</span>7 b* m( H) o& r1 H* F
- </div>* X7 @5 L8 Q! J- S ~
- 6 I2 W4 j) \0 ^2 w0 {* u
- <script>
) U/ h- K z# b0 a5 S6 W) X! k4 I - new Vue({
9 k# }+ a5 o Y, @+ o - el: '#app',) L8 B& F9 i; o4 a c8 n& l
- data: {! h4 W% }% M& t5 `! H j. k$ n, z
- picked : 'Runoob': w) V( J6 W* k2 u/ u: d5 Z' u
- }2 w0 _9 n4 U/ p' X* Y
- })
: q$ m' f$ h. f* A/ N1 K) F7 `& M - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
p) j& X# X9 k- <div id="app">9 c4 g, b- t: B9 C# k/ I# m
- <select v-model="selected" name="fruit">6 t" y8 Q2 G1 j1 {9 v( F
- <option value="">选择一个网站</option>
4 I- g; R$ Q- _. m - <option value="www.runoob.com">Runoob</option>
7 N; |3 Z8 ]' `* G - <option value="www.google.com">Google</option>5 H1 w4 `# o* `6 `5 E
- </select>
6 o p$ \* c+ `8 a3 ]0 f! H -
* F- F8 U! L! }1 o2 j - <div id="output">: \" \; G4 F# C0 q! k
- 选择的网站是: {{selected}}
) U% b6 O8 C$ K- j- ~6 E, ~1 F - </div>9 C( }. @6 C! j& W5 }$ H
- </div>6 i- c6 j0 l/ U4 r, o# c3 e
- ' G) m, D5 B' T5 T+ H8 V. F
- <script>
0 C2 M/ f& ^0 J9 f - new Vue({- i/ Q# ]" d8 s C' J: c
- el: '#app',) J- {, g' X% g) a
- data: { K, P1 N, e9 k) f! L
- selected: ''
6 M4 A- E7 ~ r: B! q; f1 Q5 t/ z6 A - }$ p3 l( l3 j; F9 t8 ?9 f
- })4 `! L1 ~; }* w6 g1 |) i9 J8 `* I
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->) m1 X# P: L+ n+ P* 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({
5 U8 A1 s* U9 Y9 I1 k" i6 r N P - el: '#app', j M! v `( n+ s4 I- z
- data: {
7 s: I0 B! ~9 Z: N3 Z - checked: false,
. B i6 i5 y' f; A5 z - checkedNames: [],
$ N# w% U8 v: r! w% L7 A6 C* T - checkedArr: ["Runoob", "Taobao", "Google"]
+ ^* h7 O9 s/ ?# h: O q - },
' b5 N Q$ r+ e. o9 U* | - methods: {" ]: z- H- @: U b1 p- X
- changeAllChecked: function() {
/ m: `$ p% r( N/ k- K8 z( c' x - if (this.checked) {1 d0 V/ ~' [5 ]/ T- p2 ~/ M. b: E. ]+ x
- this.checkedNames = this.checkedArr
* |" Z: o' G/ ]) I" f/ f - } else {' E' w8 _) E- `; Y6 ~' e0 I
- this.checkedNames = []
0 I1 Q" D# s7 } - }) F) d- x9 Z# J1 I
- }
3 i! H6 d. x2 z1 K( v* c - },9 I- \3 {# [. k; \2 L* x' S9 m; `
- watch: {
9 B6 A% |; p/ d; T - "checkedNames": function() {
% S4 `; L2 f4 F - if (this.checkedNames.length == this.checkedArr.length) {9 ~0 U" B7 w1 `
- this.checked = true" d6 c' z; t" R# O, I8 Q; ?1 I9 B
- } else {$ A' R) \1 L" r* C2 u" V
- this.checked = false& L! t, u+ [7 g" N& G1 j" h2 Q
- }' O5 a% _) G* X8 W& e: B/ f9 V
- }8 y0 b+ ]% V, T% a" z
- }
4 z' S7 q7 X# }8 W% h4 p - })
复制代码
3 u" R/ G2 U) i* f
6 b T* T! L2 q' F+ b. H2 l) Y# r4 S' u# x
1 Q! w- q, T9 k! f& o9 `" ?) N2 G, i/ i
q2 R- Z. I; s/ `; N( M1 U
1 W5 q% E! [0 f1 r, J1 j2 u/ M: ]7 |4 V/ n5 y7 O
|