|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
% @5 m" @$ ^9 b2 x& O: U- <div id="app"># a. b/ k+ { Q9 O# U
- <p>input 元素:</p>
* F; y& I. J! _. F0 l$ t/ d* q - <input v-model="message" placeholder="编辑我……">5 H) R0 t4 W2 i. C+ I+ G
- <p>消息是: {{ message }}</p>
3 V1 j" v( Q8 V$ u - 0 \( O2 d2 \( b2 t
- <p>textarea 元素:</p>
D8 T+ [+ _7 z1 E0 b% V - <p style="white-space: pre">{{ message2 }}</p>
: R `4 E }6 n0 \ - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
. i! z. j( h8 C7 Z - </div>
9 j( T3 ~1 w- W -
2 Q( ] [: V) \2 \8 R8 |7 ^ - <script>
9 E0 L% L Z% n* H( z" L - new Vue({
; V* w" V1 f- | - el: '#app',& z" ~, k: b% f' d
- data: {
+ b# R/ S" U9 o; C, q - message: 'Runoob',
# w* z% v. j7 e$ T- D - message2: '菜鸟教程\r\nhttp://www.runoob.com'8 w; Y: t, p! M9 _2 r Y
- }
' H* g6 ^1 X; S2 y2 Z4 u5 e - })
6 d0 j0 r$ ]! I, j% S - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 1 d3 j8 D9 p0 J. I0 Z8 E
- <div id="app">! D& v" G. `) R
- <p>单个复选框:</p>
& t; |) ~- n6 @! H( j% c - <input type="checkbox" id="checkbox" v-model="checked">) J$ T& q G8 [* m: r
- <label for="checkbox">{{ checked }}</label>& Q, w$ a$ i8 l! [( g2 \, |
- / U% s% B- v; z; K
- <p>多个复选框:</p>
; e: y1 K( O8 o& i4 G3 a4 X - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
* ]7 K0 n$ {4 A- h% N) r - <label for="runoob">Runoob</label>
+ I0 \% j, X; B& C j3 U5 l P! e, ]3 [; t - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
0 u B1 ~5 s* v( }0 Q* i# W- f# T' ` - <label for="google">Google</label>
7 r" g. l2 j. {& i1 x P5 X$ L" O - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">3 X s Z8 z, g
- <label for="taobao">taobao</label>
) H G. v: C" }/ R0 @ - <br>: ^1 O# v8 V, w R0 Z# q
- <span>选择的值为: {{ checkedNames }}</span>2 J: ~' Y7 u5 ]9 t
- </div>& b5 [% E" v5 g0 I: j- M
-
9 J7 G; {5 M' J+ A( ^; y0 Y! d3 |3 C - <script>
# [( s: F. D2 ^ - new Vue({
5 U5 c* h0 a/ a$ K3 { - el: '#app',& V! h0 ]# M3 O7 ~
- data: {
- \8 U# {5 B! S7 c* Y6 n* E% F) @ - checked : false,# a8 i" [: u4 c% Z; e1 q, ?
- checkedNames: []* E5 p- U7 b/ V) t8 y+ Q
- }
5 |, ^" D( A- ^) ~! B6 j) I8 X2 V* z - })
. c+ c0 J' Y5 R" k* X4 y - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮3 l- H/ R" O# a) L
- <div id="app">
i. p* W4 m5 F8 w0 w+ n7 J/ N - <input type="radio" id="runoob" value="Runoob" v-model="picked">
" S( Y( h3 o2 h6 k, K, _ - <label for="runoob">Runoob</label>( T9 Q6 O. c! b* a+ V
- <br>0 u: M, b0 i0 ]" Y. ]! K4 z
- <input type="radio" id="google" value="Google" v-model="picked">
8 M+ X' {6 y% R, D. b& b& @ - <label for="google">Google</label>, {/ F3 |2 [6 u- c* x: X& Z
- <br>/ V4 y/ [) W7 `+ N
- <span>选中值为: {{ picked }}</span>
9 A8 c. p) A& C8 q& ^ - </div>
( s7 A5 @, N& i( B2 o8 s - 3 T2 S- I: `3 w2 g9 f7 N
- <script>( X, t# ^( t4 F, {. V1 O
- new Vue({
# G- c3 g! U2 s$ K! W - el: '#app',
2 q/ g. g6 S. ~1 p; |% \- J0 k8 B' w - data: {/ q8 a: G6 r) X/ Q/ ], x
- picked : 'Runoob'
, D. H# Q+ B; E/ Y - }
7 i# q+ |: j c/ }& ~& n& w2 k* l- X - })
4 a) i7 ?4 H7 Y. E* d9 c - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
: g) l. H" B9 i' V7 K( a/ }- <div id="app">2 n1 z9 b- ?, Z) S0 C: N& f- G) ?0 |. V
- <select v-model="selected" name="fruit">
8 w- Q6 P% h/ z8 m - <option value="">选择一个网站</option>
7 h, x9 ]( D1 e6 ?8 C6 { - <option value="www.runoob.com">Runoob</option>2 G# Z1 T/ {7 {
- <option value="www.google.com">Google</option>
6 U5 i b0 l" {+ A) j: p - </select>+ S1 d% f9 r# o: u! d
-
+ I, Z0 n/ }7 k" \; B - <div id="output">
6 \ ]7 x* R* ?. c" O* C, t! x - 选择的网站是: {{selected}}$ O3 t6 v" D& C9 i. m( ?) c' f
- </div>
# K" D% l. t6 e, `% V4 \. X - </div>
8 |4 o3 Y' F7 `) d$ Y* r - / k( i6 G7 u, M+ Z4 o
- <script>
4 m. }( X" u8 z$ [: K- @ e - new Vue({
# X& ~0 q3 ?! H - el: '#app',
/ q1 H9 _. t1 n. O2 b$ C - data: {# \( n6 @" P6 @2 G5 }$ v
- selected: ''
0 f1 Z) F2 ~( @, Q1 h/ C1 Y - }
! }6 a# `. g) y5 q/ Y5 h. ~* X* V- J - })
9 P) `8 d' D$ l4 ^6 s R5 r( d" T* | - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
( { X. k' E' p) ^" o' C - <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({* Q6 _' b/ l" X
- el: '#app',
3 p: M# l- A. b6 T- f - data: {( B) T0 j4 p+ z q O. M
- checked: false,
+ H7 c1 N$ T+ m- r8 a: }) r - checkedNames: [],
* C6 y% z' |, s6 O: B4 a- ? - checkedArr: ["Runoob", "Taobao", "Google"]; s0 M* @: S( O$ [7 @$ B% a$ _
- }, w: m7 a) g* ]7 e' C d
- methods: {0 D# k B" E) V S
- changeAllChecked: function() {$ a( S. P# I2 z+ C5 k. }) |
- if (this.checked) {' _" O! ?( T& H
- this.checkedNames = this.checkedArr3 y/ e. p4 c+ B$ j; [5 W3 W
- } else {
8 F% T8 V) f: W - this.checkedNames = []: P V% i6 k5 R+ f
- }
. d8 u+ D* d6 X) S - }- }+ |% K2 z( n) z* b. k5 w; u* z
- },
2 K1 M/ L2 V6 Q/ N - watch: {" a. a4 g9 C7 W' ?! q' P. k
- "checkedNames": function() {2 D2 V) ?* h( T. @' U0 R3 t
- if (this.checkedNames.length == this.checkedArr.length) {
' [ @% o, _/ X% g$ Y - this.checked = true4 ^; \8 {5 R$ q: l0 M0 C) }# U
- } else {
, K* T7 ^, {# x4 t- v - this.checked = false
i1 O# u& U }( G; O - }
3 y- H* p4 L. C2 n - }+ s2 b* K+ ~# c% V4 W4 r. A
- }" C: J6 X- S/ Z. b& U: C
- })
复制代码
7 }" U V/ ^% q. |
: [& G* x c6 A K
# R' j; _% G% H
. @; _: o* ?1 ^: y2 b% @: H6 Q' s
1 T) K' V. i# Q. f' s% A
0 `) {' j/ ]5 W [; _1 A% F+ V+ p: I4 S; f
/ I% x, L) m( b9 T) \8 v( K
|