|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
9 e. V" \1 ?$ A# P- <div id="app">
; O) y. ~( r4 k" J% m! C4 F - <p>input 元素:</p> K: _% i8 R: ?! p& ]$ B, u# N
- <input v-model="message" placeholder="编辑我……">
C$ R) Z2 p# @2 i3 j - <p>消息是: {{ message }}</p>8 y/ Y8 ?& _" F
-
; _- a& [% h5 T- M - <p>textarea 元素:</p>7 B2 v( A {7 I0 O1 w$ Z
- <p style="white-space: pre">{{ message2 }}</p>' o$ X4 n. a4 a |
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea> e" c) F& T3 M9 C. w" l
- </div>
|2 F9 T7 `( p9 y" E: G( u -
) m4 S4 C5 V b# ]7 w( ~; t - <script>
- b; G7 {) s0 C - new Vue({
J5 _- R: u9 S4 B" r - el: '#app',& M7 B8 }0 h' I, n3 o( [4 c
- data: {" o$ U( e( X: f
- message: 'Runoob',
0 D- |! a' l8 M" J/ Q/ p. X0 X - message2: '菜鸟教程\r\nhttp://www.runoob.com'! J) q+ ]* r9 ?: k
- }
8 x$ b. s+ a& f8 Z - })
5 F; y0 x, x$ [0 h7 o, l - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
1 Q. l, _6 h: B; Z7 ^- <div id="app">3 d1 |8 O5 m/ O4 `% F0 `
- <p>单个复选框:</p>+ Y* g2 i7 n& m7 y! I3 g
- <input type="checkbox" id="checkbox" v-model="checked">* v7 V5 v8 ?+ p
- <label for="checkbox">{{ checked }}</label>
7 {9 T3 M( V) ]# J) K" G( x( ~0 R' Y& g -
$ O- Y% ]4 W, i" g - <p>多个复选框:</p>
$ d' M& X0 d x& _) I! M - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
, ?& P1 R( a" y5 V - <label for="runoob">Runoob</label>
8 T. p& G- A# \& y; _. Q) H( F - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
) A+ ~8 t6 @; i2 G1 n1 B6 q# K9 j* \ - <label for="google">Google</label>
# p: u$ v/ a( i" M) h$ w1 z - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
- O2 v* Q! O3 Z' o8 n/ F& [& f - <label for="taobao">taobao</label>
- V5 `; c# V" E) P7 {6 f - <br>+ t0 p- L' w% N8 x
- <span>选择的值为: {{ checkedNames }}</span>
" z: q' W# B# Y# B - </div>
. |* U" b" \1 W8 j! G5 e2 V) B -
& V9 W# e; V+ J9 x9 w - <script>
. s: r: r0 S2 h8 c, h& b! G - new Vue({, r1 y4 ?/ [5 Z+ N
- el: '#app',1 I. S4 V6 z0 X6 n c, U
- data: {
( m v1 K# a% q+ ~# c* e6 H - checked : false,
8 K2 D0 g8 X" \1 c0 A4 l! w - checkedNames: []6 V, M D/ P, z# Q
- }
( |+ h, ]' Z* t$ U - })
4 h. ~" D0 B z. _ - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮8 n, D' p9 s2 _" P x+ Z7 X
- <div id="app">5 W9 ~, J0 L0 ~+ j3 v* w
- <input type="radio" id="runoob" value="Runoob" v-model="picked">7 G k/ q, q5 B9 H4 R
- <label for="runoob">Runoob</label>
' |9 p( I! m1 j2 W+ \7 F" i( C) `+ X - <br>
, {6 Q. E3 h5 [0 C# I4 r5 s - <input type="radio" id="google" value="Google" v-model="picked">& [5 F" v2 l: u) c. T' Q+ K3 d
- <label for="google">Google</label>
# J7 B9 k0 W. p4 b" `( G( ~+ \ - <br>
- S3 e2 ?9 w2 _ - <span>选中值为: {{ picked }}</span>
0 m& a7 D7 V* n- K y) {6 M1 E - </div>: g8 b1 |1 Z9 o+ k
- & l0 r7 n" z+ {' c
- <script>
- s7 F$ ]6 ^9 E4 V' q - new Vue({
P8 K. _9 A/ d2 M) n - el: '#app',7 S" j4 |$ f d2 p7 n/ N6 S
- data: {4 M+ J! a( U( i
- picked : 'Runoob'
2 ~9 X: W, ~0 {( ` Z) f - }
1 m* y4 @0 L; H/ {" G" ] - })( Z- l3 K8 s @5 B% d7 d& u: b2 P
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
2 u, Z) n: F3 w" [- <div id="app">7 }$ o1 N" Z- d! i
- <select v-model="selected" name="fruit">
1 i( `2 N' D% I3 u* U Y) k - <option value="">选择一个网站</option>5 ?5 J3 e3 H+ x% i" j3 M
- <option value="www.runoob.com">Runoob</option>
2 ?6 @" j6 M# `" s9 R) b - <option value="www.google.com">Google</option>; E3 k5 k2 ^ R
- </select>
9 K* C( H1 D" t- [ -
& X# @* L" o5 k( @( g. b9 {5 l - <div id="output">3 z! m; ~7 ~2 O* c/ e* q9 J( C: b* {2 f
- 选择的网站是: {{selected}}
+ T5 b0 J/ j' g- ]) M - </div>- H3 r& L8 P1 L3 \, \# R5 Y2 B4 t; u
- </div>
" X0 {4 G }9 F% U -
* {6 k+ N( e0 b: F0 Y4 c) z/ z - <script>. J0 V' \* c% a5 l( Y2 g- g- m
- new Vue({ R2 k. ~1 Z' ^0 f
- el: '#app',8 c( ~6 [, C# w; X9 t X
- data: {
$ Y U; M2 t, f) F* K+ y3 i' S - selected: ''
% K6 _1 b' o5 Z% a4 E" S" v( [ - }
9 z# a. q/ ? I& e$ V1 O - })0 w" y8 @! w% _% K' z' @" V3 o8 Y/ U
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->. `2 T: R8 w: x$ q/ G* x$ z
- <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({
! |/ x1 f" `, @) k& I6 s( e9 D - el: '#app',
/ w. n, C5 n! l - data: {
& Z f- `# n, U6 s6 @1 ^$ q# ]& d - checked: false,6 K6 Q2 v, Q& g# |% Q7 O: _
- checkedNames: [],
9 n0 r W* i+ e, n; F - checkedArr: ["Runoob", "Taobao", "Google"]7 \8 _3 ]- b& @ c9 I
- },* ?6 H: i+ l5 y4 d b
- methods: {1 J3 T" a0 _& e4 |: ~- E5 g
- changeAllChecked: function() {8 \5 E) T0 [7 {. U8 i
- if (this.checked) {
5 n3 k- v" C2 U - this.checkedNames = this.checkedArr9 S; o$ s4 j6 W; ~$ ?
- } else {0 l y/ J$ y( B+ e7 ]& u6 ]
- this.checkedNames = []' t2 f* u% Y5 c0 ~; N. J5 S
- }' w3 ~# c# F1 P$ x+ p
- }
7 ]5 _& s( ]& \8 y - },
8 ?' }/ X9 j& ?4 h - watch: {- c; t# F7 ]1 z! t6 E- u& M: @
- "checkedNames": function() {
( C% n5 Y$ z, c; x - if (this.checkedNames.length == this.checkedArr.length) {1 M( e7 w# Z; V
- this.checked = true; p; c! b& M6 b) O' ?
- } else {
`9 n4 N' I; l" U: K - this.checked = false
. G7 ~# j3 H7 _6 V/ s+ @ - }
+ G- }, g6 ?$ A# p0 Z; s% S, \ - }
# N" a" c' b: V: _( W `7 P3 X - }% ` {+ x7 `/ `! I: y
- })
复制代码 3 _; S0 _0 T, `3 M: |+ j* c. v
. P) `. x8 e* i) K/ J
. V' S% T% i! ^ p2 c
4 S. t( ^; H6 f; ^! K- K7 _9 x9 d. E& ?+ w, s: i
3 @ S- ^' s3 u. f; ]9 }2 Q
3 x0 m% I" K; M Y2 H4 W9 \- c0 F0 f8 }" L, {6 Y# V# |' v4 F4 \
|