|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
$ c Z$ O) x3 e- B% x5 Q- <div id="app">
2 I1 [2 C! X+ ~2 E0 t3 a - <p>input 元素:</p>4 }/ |8 x3 Y& |; S0 x; Y& z
- <input v-model="message" placeholder="编辑我……"> ?1 m& k: J6 ?$ {! w/ I5 O
- <p>消息是: {{ message }}</p>* m; v5 g, y6 M
- 3 T5 X/ M, ^: \3 D
- <p>textarea 元素:</p>7 a: l. u0 Z; J4 R5 D- y
- <p style="white-space: pre">{{ message2 }}</p>. T/ u: Q2 |! b1 d: l3 T1 I
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>. G( c6 H6 i9 v5 N/ `/ `
- </div>, F* t- i/ B+ s, Y. K O! h
-
6 l) c& c& ?2 c+ T( O3 k - <script>
{' S' T( h( f+ @$ |, ^9 O - new Vue({
& }9 ~2 ~2 \2 l) d$ a2 ^ - el: '#app',
; t, q3 V. I V1 C# [4 @ - data: {
7 N# ], S- H$ {# } - message: 'Runoob',
) r8 `' x0 z. i$ m - message2: '菜鸟教程\r\nhttp://www.runoob.com'3 T6 x( s8 t' m( |2 x" l) j6 }( h& P
- }
; k$ m5 @$ C- p& j. g* G - })7 t5 w$ }, l' |. s$ @7 z
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
$ F) ^5 M8 @8 {2 @- <div id="app">
8 j: ?: ^) t4 T7 s+ B - <p>单个复选框:</p>! f5 A9 N: B8 g; ?( E
- <input type="checkbox" id="checkbox" v-model="checked">
2 n7 [8 Z2 E5 J - <label for="checkbox">{{ checked }}</label>
4 ]! \, W( M6 }! x) Z6 x - % X% G8 h& d7 ]. Y' m) o1 Q
- <p>多个复选框:</p>- Y9 f- {3 g, u5 L, I
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">: D( N# {9 i1 D1 E9 U4 {
- <label for="runoob">Runoob</label>0 ^* E% |/ K" ~8 `# S, O2 [1 L
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">4 H- k8 n+ n8 b+ K$ S9 h& S, W
- <label for="google">Google</label>
0 e G) Y' V& I' g, M7 A' ^ - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">0 ?- K7 m# M) A) e, u; K
- <label for="taobao">taobao</label>+ G& }# `9 A, \ B$ C$ Q4 G% u
- <br>* v- J7 O1 l* x, J7 @# t
- <span>选择的值为: {{ checkedNames }}</span>
2 G& U, |. s1 s6 y' s' m - </div>6 e$ f5 A( |# g; S% s
-
6 Z6 F3 D3 c' l4 y - <script> t) z: P2 Z7 }
- new Vue({3 x: w" E; s$ V6 W( ?- z: X( ^$ q
- el: '#app',$ D; m8 f9 m$ m( f6 d
- data: {- d2 A! e9 g' I- R5 v9 I8 f
- checked : false, G4 X1 H. r; V/ t
- checkedNames: []
$ t( v+ B9 c4 R9 _% S. |: n - }
- p5 O9 b4 l e0 j( P# t - })
; `9 w U1 V' K: b5 a5 @ - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
3 d) I# k0 y$ v- z- <div id="app">% P4 n+ l- w+ e; |1 G
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
6 w% T3 S# u6 E8 U5 B - <label for="runoob">Runoob</label>; G( [3 G' n" k; C
- <br>
|5 l; A7 Q+ f2 L* A7 r1 Y. C - <input type="radio" id="google" value="Google" v-model="picked">
/ }( k# h1 M) B) U- S2 } - <label for="google">Google</label>9 u( W9 N! x* @: S0 O9 \& r0 w/ t
- <br>
, x9 x4 C" u) E2 m0 M8 X) I - <span>选中值为: {{ picked }}</span>3 _; c- b2 d* K* Q/ Q, v
- </div>
( o* R3 ?4 @, n7 j; | - 3 \+ K4 V, O: X
- <script>& K: }$ x) x6 @ n; z6 T" s' T
- new Vue({
* Q8 H' x: X0 S - el: '#app',. u2 F+ J1 v8 q w) p& H
- data: {1 i" }0 O( }" Q, C7 x( c2 p/ g- H
- picked : 'Runoob'8 C3 P5 q1 l, |/ |* _; N
- }& \. i2 ?/ J9 \
- })$ Y! \8 M2 V# `8 D
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select( x% l2 |$ [' t$ o1 r* S# C
- <div id="app">
& D% i x8 N% Y+ u, n - <select v-model="selected" name="fruit">: ^4 [7 S% e' L5 ^( f3 T
- <option value="">选择一个网站</option>
; J! Z& [' T$ N4 E7 c9 \ - <option value="www.runoob.com">Runoob</option>4 Z `& {( A% w7 t+ ]: a3 @, O0 }& T
- <option value="www.google.com">Google</option>/ B: Z7 I7 N% Y8 b! ?
- </select> F$ d# n6 Y/ R+ w+ b2 t0 u, ]
-
2 X3 x6 i( _6 } - <div id="output"># I# q+ I: |' @) K- Z: _
- 选择的网站是: {{selected}}: I5 [8 E" a4 X" ~/ L0 J$ t* N
- </div>7 k, I' ]- J8 d% W; N
- </div>
- @" W/ T* }9 X& z4 A" i! y -
! V1 ]' H, M+ V/ z/ F - <script>: B' K4 z' f5 v: r
- new Vue({
# ]" J e9 O" B8 ~" ?8 ?& A - el: '#app',7 H6 f4 g8 k' W6 h! Q1 _3 [
- data: {4 B& y/ E3 C9 U# I$ @+ D
- selected: '' : `. M, p% r: b' o6 [; ?
- }! b7 k- Q1 K* A1 ?' K0 {
- })
7 z' w2 K7 U! _: n. k: t; h - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
4 M, f3 H8 F9 v7 |4 v# L# E - <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({' Q# n" t1 n; I% S+ a5 x3 E- F; J7 R
- el: '#app',# N, M' ^: l7 O5 Q+ b3 y
- data: {
- i: ^- [3 C# B7 l - checked: false,( [" p" Y }3 q% a4 e( a3 V
- checkedNames: [],: h7 C/ K+ |9 k- x
- checkedArr: ["Runoob", "Taobao", "Google"]( c. d8 G7 N& e& q% e [
- },
1 ~2 E2 A! j0 H, b! S3 U; i - methods: {
|2 y! t' j$ K9 Y - changeAllChecked: function() {
. x! A& E/ {% C/ P0 Y% H- J - if (this.checked) {. R% w' F6 I* e# ]4 `1 S
- this.checkedNames = this.checkedArr7 H+ @2 y4 t& `- l' k
- } else {
! _) H" t0 ~4 o5 Q7 G - this.checkedNames = []- Q! I; g: r6 a) V7 B$ M+ W; v8 ~
- }4 V1 p: t" }! A8 s: C* N" T
- }
# q" ?1 h% N4 ~4 X4 f* N9 p - },7 [3 r* b% o& y0 [5 J# D* b& Q
- watch: {
f: R; J, _! ~4 k7 L - "checkedNames": function() {
/ t# T1 R- T5 ^+ u1 S - if (this.checkedNames.length == this.checkedArr.length) {+ L2 A$ U! d# f
- this.checked = true
& ~! G0 o) U: W: y; L0 x1 p - } else {
0 ~3 H! c% r3 n1 `2 Z/ o4 [, s9 N* s - this.checked = false
a1 ?$ b" v6 D - }
! d( {, w/ Z# C. e* n0 r - }
2 L [' Q: h; A, Q$ @4 r - }+ l" `0 }7 M$ t
- })
复制代码
; V6 J$ A& t' J+ i3 \9 k8 V/ S' N; {" _
$ e# I2 F2 U- }9 _9 J, V9 y$ @
1 X( L: }! L n3 p" w$ w. x0 \0 S& J* Z' n0 X# r( }
% n8 u% L- y) h, V- o
2 b4 K. F! e. K. n0 ?. A1 p) |
3 ?, \7 |' Z7 Q# d5 x& Y7 n1 z* R1 b2 W
( x1 a' e+ N6 J0 ?/ P
|