|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 0 d$ w9 a" p0 @2 n' g0 W p
- <div id="app">/ i" U9 s/ _- [. `+ L
- <p>input 元素:</p>0 }8 O3 ^, Q! t) Q2 H# l
- <input v-model="message" placeholder="编辑我……">" _6 U- s8 v* I" G6 r3 T
- <p>消息是: {{ message }}</p>
) i. N* o$ w6 u6 H+ ]6 z -
3 _( I6 L0 H+ e$ J# w - <p>textarea 元素:</p>
; G, |8 p/ g: g' |9 x; } - <p style="white-space: pre">{{ message2 }}</p>
1 v V8 L& t/ _1 c8 Y - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>& D# A7 m4 [; n% j
- </div>
: p9 z: p- x) J -
# _* y+ T' r' b5 F# b2 Z - <script>
& R4 ?9 y( e) ^3 Y4 n+ ? - new Vue({. s. ~" `8 N( ]; v; L" @+ I9 x4 n0 R' z
- el: '#app',5 v P# u6 w* P
- data: { ?( U5 P! L! ^/ ^2 m
- message: 'Runoob',! M: Q# d2 i2 x2 F: e& j
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
* x. o: N" D4 Z - }; Y: \- W8 {$ ]; g$ @
- })7 S& J' x W+ Z ^1 s4 t W3 P
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
" p1 Y% J+ i, d- <div id="app">7 B/ @+ p/ i: T( c* M, T6 U
- <p>单个复选框:</p>) I: E% @/ N& W8 J$ X
- <input type="checkbox" id="checkbox" v-model="checked">
0 k' z" K* o( ?) u - <label for="checkbox">{{ checked }}</label>
5 n8 J+ P" A0 }2 t9 ~* n$ O6 R -
/ h1 @4 N- e/ e( ^4 c8 |& y) C - <p>多个复选框:</p>
# c& E7 L" y) z! b0 a; Q- c - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
; ]" ^6 V, f* G% p1 z - <label for="runoob">Runoob</label>
% d) D: @8 _& ?3 a - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
K2 D. ~! Z9 F, O: E' p8 j - <label for="google">Google</label>
# `2 u, [0 ?2 j8 F4 {- o! r8 j - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
% u" H6 N, j, a% W2 D- Z& w2 W - <label for="taobao">taobao</label>
5 m Z0 D8 R: J( q1 {/ b8 n - <br>
( Z7 R0 L, x& w4 G( v6 i - <span>选择的值为: {{ checkedNames }}</span>/ x5 t) ^7 W% O* E
- </div>; N7 _# J& }, Q# A1 q z
- 5 _" d% I; G/ @# S; D, E1 d/ G6 i( J
- <script>6 X- x* S0 l. v* K" g8 m
- new Vue({2 ^0 ]; f4 }! i# ` O) C
- el: '#app',
5 k& a( C' P6 C( q: m9 Q - data: {# n" P% s$ }: @
- checked : false,
- v$ n# p! S6 k3 F7 B - checkedNames: []
; p& F1 T4 w: W - }2 N' s& K) T' _1 F
- })
$ M( {, X5 F; K, r( N - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮2 L8 { j4 m4 ~% ?6 Q
- <div id="app">
4 ?6 T: m: `2 I: ~7 j5 D - <input type="radio" id="runoob" value="Runoob" v-model="picked">
* \" l' `/ Z E b0 m# O" u - <label for="runoob">Runoob</label>' D: _! w' c" b. |- T
- <br>
; F) L: ~* P+ c! i6 X. c' t - <input type="radio" id="google" value="Google" v-model="picked">2 y+ T3 @2 e' l7 p$ S; N
- <label for="google">Google</label>$ B( |* W/ e, i( J. G1 T. R# X
- <br>
h/ {# \. E' g - <span>选中值为: {{ picked }}</span>
4 g' y1 K% L; o& R - </div>1 E, p7 ?5 c3 A" J) A* ~! v E0 Q0 X- y
-
' H& B) O2 P( G0 O8 X- c - <script>( u# ^: S# q6 S G% N+ ]* P8 b
- new Vue({
$ v) G3 _: w/ u" b* k% d4 B; {2 K - el: '#app',
+ K) K' i( ^1 e - data: {. t" K* m2 e6 M& ^
- picked : 'Runoob') ^ [6 G @' V J. O/ ?$ h
- }& K8 k7 E! j2 \% G+ P
- })
1 i% M8 N3 W; b9 U, c# k - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select; O* O: k( P& @
- <div id="app">. x# C0 {; ^( B2 h0 k
- <select v-model="selected" name="fruit"># U: L5 w# @8 j( s: N9 m6 M
- <option value="">选择一个网站</option>
# @7 D/ `3 \8 N. U( h - <option value="www.runoob.com">Runoob</option>
) n& J; X9 a1 C - <option value="www.google.com">Google</option>! f! ?1 P( ^+ _! G
- </select>
" B4 g1 t' m/ o. ]3 | - 1 A. p2 Z, m4 \0 }- _8 h- ^( h& `
- <div id="output">+ x5 }+ t) `' l" P* f: H
- 选择的网站是: {{selected}}% ^8 ]" I) e M: E! n |: u
- </div>
% U" B6 S8 T; f1 J - </div>( B" h# [# w1 O6 ^
-
9 g- K" _0 Z( s: I; e4 x3 p - <script>; {; G7 K, `/ X6 z( a1 w
- new Vue({. g5 n3 H% H k; i7 P, `
- el: '#app',6 B& }( M& J/ g8 W5 T
- data: {- \" O2 t1 N* {! b# U V
- selected: '' _; L y* K; D w2 r8 K9 M: d
- }% l' M1 q- R/ l5 s3 ], S6 {( b
- })
/ e4 A5 Y& \% e5 D/ K" [ - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
' D4 n3 G1 C7 I3 \% @ E" V - <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({: t0 d- H6 D6 p$ j3 c
- el: '#app',' \4 k8 D4 S; F& B
- data: {
: ]) ]+ s8 j+ V4 o6 R4 Z - checked: false, Q6 y f4 e3 ]4 t
- checkedNames: [],
: ?( A% n% @3 S+ n5 I - checkedArr: ["Runoob", "Taobao", "Google"]
( G& \( w3 |% r4 ]" A2 h - },
' U- q2 u7 c& n5 ^2 j - methods: {
6 T+ j7 T: r" R; ~( S$ | - changeAllChecked: function() {4 a# p; p b9 J! M& e
- if (this.checked) {+ _) h/ l- X) ~: {+ x
- this.checkedNames = this.checkedArr3 \4 H- p# L2 q+ B7 V" O
- } else {* V- R3 a2 n# R
- this.checkedNames = []3 u& i6 x- X1 ]3 C) M P
- }9 o- U% }! N; Y; S1 [
- }1 Z$ a+ G* t8 q$ y
- },& a! Q3 M: O" D0 i* ~& o* N
- watch: {
$ _& W# t1 Y2 M: I& B. j3 R7 L - "checkedNames": function() {! s! F3 j- u, B, w9 r
- if (this.checkedNames.length == this.checkedArr.length) {: v3 Z8 p* e8 k' g& {
- this.checked = true6 P- o- v6 `. B
- } else {3 \" g& \ y; K: ?: ~- C. g. @( Q
- this.checked = false J5 y8 H" u3 N
- }8 q+ d: C( y3 D/ }. k; O7 P
- }$ G: T6 Z: k: P. b
- } e. b# ^5 N; s6 \! ], u1 N
- })
复制代码
& S, B7 X& W& I% r" S# L
" J6 M* |6 N% l6 @. j5 E l2 y( z9 I* L
" @3 D! {$ w% T9 Q% m' }& P. u1 c$ i: ]( u
; j6 J0 N' H6 G
3 w+ W( K, c1 s9 b9 S" H9 P
0 c3 X8 ?; a+ U9 I8 j% G$ j2 B$ ?4 a, ^2 d! }: Q
|