这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: ) e" W1 a: y3 F$ N
- <div id="app">
& W9 h4 J; R: p c9 a - <p>input 元素:</p>7 M% u4 {& [: y4 P* a# |: Q
- <input v-model="message" placeholder="编辑我……">
, U; E/ l& y9 ^* F/ X4 V - <p>消息是: {{ message }}</p>9 g2 ~2 v9 E2 N' v
-
& k! W3 ~, O' ~0 s8 T/ b) G - <p>textarea 元素:</p>' k) q6 X# }4 H7 y3 ^2 |% y( n% w
- <p style="white-space: pre">{{ message2 }}</p>0 _: Y8 a$ j K. W
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>) c4 I. q7 J L4 u, A' y" D
- </div>7 R/ _3 @% `" n l( c: c* N$ k
- 8 u4 Q# V* j" h* x I9 z4 H& g
- <script>, t& g8 w3 C8 B* V% p- X$ O5 y
- new Vue({6 H7 I8 C2 u2 e1 H/ S& q* Z" J
- el: '#app',, a* S+ h5 U; s- L$ `7 x
- data: {6 O+ j7 {3 ~1 u# _$ C: j
- message: 'Runoob',& p2 K' V$ B. S9 x+ Y5 O
- message2: '菜鸟教程\r\nhttp://www.runoob.com'8 h- W' a2 L Y8 `2 w/ y( |
- }1 C( {0 M* a, ?/ @2 D
- })- _" A2 B5 G/ u( l7 x3 k
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
$ a) ~! g8 |* O9 Z- <div id="app">
! V0 o- j: ~6 x: [ - <p>单个复选框:</p>
$ F. B$ V, ]6 ^ - <input type="checkbox" id="checkbox" v-model="checked">
6 L# y' t5 F; U1 h - <label for="checkbox">{{ checked }}</label>. h3 ?. R1 L' f" c8 ?2 p) B! R
- $ v5 y/ P1 o0 _# o' C7 b4 ]
- <p>多个复选框:</p>
; I$ f" b. o9 ]9 _1 _ - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">7 A# ]. p6 l/ Q K( V+ I3 \
- <label for="runoob">Runoob</label>
/ R4 A2 l* f- ]8 l, L - <input type="checkbox" id="google" value="Google" v-model="checkedNames">, }# ^/ V) F4 B m
- <label for="google">Google</label>
7 Q0 E# Z& Z* J5 `# q5 A& d - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">2 B; `0 Z4 u( T3 p) ^
- <label for="taobao">taobao</label>
7 F1 [- e$ q- a5 o7 @ - <br>
: L& A+ A" X' i - <span>选择的值为: {{ checkedNames }}</span>
. _$ t* ~$ H* I6 G - </div>
& y8 o4 ?; S8 c- q. @ -
3 O( I( U' b2 ]0 U1 z% q - <script>; G: ^, S6 D- k+ u1 t; V! k
- new Vue({8 }3 E* _/ @+ a; u8 t- S; c
- el: '#app',. f+ @& X( P' N G) {/ t. @
- data: {
, t9 t& K- r3 ?& q" Q - checked : false,
' f& @$ n. x% ]4 s% V, l - checkedNames: []
& G! V; j0 a2 U$ G, l0 E6 p; f - }
& [' W1 d; j( ~3 F) e4 Q) j" I - })
1 V( e( ]8 s/ n* z* r- k7 G - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
6 E2 s Z1 R' @& p8 p4 S- <div id="app">/ E7 I* @. B1 f! v/ m% h% y
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
7 q6 T4 `3 X. ~5 b2 n. d - <label for="runoob">Runoob</label>2 f+ t& n! F5 W$ C' W( O
- <br>
& z6 X% d7 S$ N8 R. s - <input type="radio" id="google" value="Google" v-model="picked">8 D. l5 G$ N, _) e- i
- <label for="google">Google</label>$ s3 |' p! y5 m' y
- <br>) O+ R$ Q- e: H% @; j) G
- <span>选中值为: {{ picked }}</span>" K5 o1 c2 d4 c0 x
- </div>
, P- {/ r; e" I: [ - 5 ~; Q/ [& b& u; p
- <script>4 n- o, T: m b" ^8 r
- new Vue({
7 A3 o( k5 T' b8 z, w# N - el: '#app',
+ q; u4 Z; ~9 _7 B5 H1 L% d - data: {
' P0 e i3 n8 y, R2 y. N - picked : 'Runoob'9 I4 g8 K* Y* {( h0 F! k4 ?
- }/ ^4 t+ y/ m9 f$ J& b
- })
4 e. h# v0 ?( I- F0 m9 N& q - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select" b+ Z9 u; b# x1 A* _
- <div id="app">; u( e+ y' U: h1 a0 @/ _
- <select v-model="selected" name="fruit"># I+ o+ A# x% } @% j& J: Q1 L# o
- <option value="">选择一个网站</option>" v' E: J9 ^! ]9 b) d" P$ J
- <option value="www.runoob.com">Runoob</option>
: y- v( p- X; ?, `' {4 f% j: f - <option value="www.google.com">Google</option>
' W7 r7 Z- p8 W1 ^ - </select>0 C# T( p& r# f6 {: r$ c+ G
-
2 h" q) M3 n ? - <div id="output">4 G' m+ ^ d$ ?! v7 V+ \
- 选择的网站是: {{selected}}* ]8 O g, L) K7 t$ j, ~
- </div>
* h$ d' z- [1 _7 _5 n6 A1 c5 \ - </div>
) v, G. Z) I- L7 H! s - 2 I9 J+ I4 a8 f6 q
- <script>
7 p" T' l. d8 O6 B - new Vue({5 o8 [: r: o- t+ D) l# B* r8 z+ i
- el: '#app',% N9 C) A% N& H% u6 N) j
- data: {
- x# I& n5 n: {6 S! D1 M# W" C - selected: ''
* |# v3 K+ t3 P) y5 G! S - }: }5 X1 w" o W
- })- V# j9 K7 P* |1 G5 L1 ?; q- a
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
2 _) s! s9 E' [3 A - <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({$ O2 B" U+ K. ]( H3 p6 }
- el: '#app',2 ~+ S1 C: O! |9 |$ o. {- S
- data: {
' b( d# F: N6 o - checked: false,, t0 v) V* q1 V. C: M
- checkedNames: [],1 p/ O7 X3 G) Q8 l+ q. I
- checkedArr: ["Runoob", "Taobao", "Google"]; i6 b0 G) w0 C9 B8 B
- },
5 C$ y2 M: k0 h9 ~6 o+ g, m2 s - methods: {) b( B5 ^& ^9 [7 }9 U
- changeAllChecked: function() {: y( q7 `, p6 g" n
- if (this.checked) {2 M6 \' }5 V4 N5 A$ T
- this.checkedNames = this.checkedArr
' C _+ E: l6 N+ Z# I$ ]8 M - } else {
" X/ x# ~9 `9 B# x6 p - this.checkedNames = []
$ M0 d$ I# }% @( r) {7 y% r - }
6 x% h% v2 q" s9 E; y' W - }- p4 u. {) u$ S
- },
9 b. j4 _( e5 s7 E( ?, U - watch: {$ @# D- W8 j" I; I
- "checkedNames": function() {/ D3 _( k2 @8 X4 n
- if (this.checkedNames.length == this.checkedArr.length) { P4 P- n! c2 ?$ f( V
- this.checked = true
G9 F& j! x A8 a* l. l - } else {# u2 C( D& y# p2 H$ h& P& M
- this.checked = false( Q0 R/ K; A" T% V1 n
- }! f! H" D" {- ?6 _
- }* T3 u0 B- t% D' L1 V
- }! I9 H3 r. x+ |( q- l! ]. E
- })
复制代码 , I0 n0 v( v- x4 m, n3 L! { m
. w8 f6 P) d. t0 M
/ M }% ]: W! c A) _$ u% A, E" n) v" x& g+ l4 k
9 y" V* A5 d2 f$ f7 U
x/ R/ X( m( x$ q3 c% Q# u: U& _+ D* C
+ o; |( G+ R' ?8 P( T
|