|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: ! l3 t5 ]2 _+ |( A" p
- <div id="app">
+ E$ U" c, s7 N, j - <p>input 元素:</p>
! u a" _% j" q+ } - <input v-model="message" placeholder="编辑我……">! B+ h" f# T( ?# l' |, U: a* o
- <p>消息是: {{ message }}</p>7 c0 v- ^! z/ A4 ~/ ]) x7 Q
- ' C- c5 S& j0 g! D. Y1 Q
- <p>textarea 元素:</p>1 T0 m4 e& H9 G, x) \$ d" |( w
- <p style="white-space: pre">{{ message2 }}</p>
* s4 s9 n2 @6 m* I$ X/ M( j - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>6 l$ W, }( o7 G
- </div>
( Q/ X! b& M4 u5 J# i3 ?) b -
# F( Z- D! l. j, N4 H - <script>: n" V4 U; Z" R& Y/ q
- new Vue({
( E9 }, O9 S/ t# h4 S6 o - el: '#app',
* T1 k; E& Y# l6 h& N2 p - data: {
+ n2 a4 D+ d- q) B - message: 'Runoob',. H9 C; b& C" I8 o
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
1 }2 z: [! g2 G) H. ]6 U3 o - }
8 R8 d$ \& X4 W% V9 \! \ - })
* `7 V% j: }2 B5 M" M - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: ' q2 D& C2 X$ \7 w* }5 [
- <div id="app">/ x& F }) y5 I9 S4 |: c
- <p>单个复选框:</p>
# `' e- m+ i+ E" \& f! B) ] - <input type="checkbox" id="checkbox" v-model="checked">& ~% ]; v2 G, P7 y7 j; o% _
- <label for="checkbox">{{ checked }}</label>: N7 g' m. d* ?
- & y' P& ?, ^+ k# m! Y- d( [) j
- <p>多个复选框:</p>
! u( C9 p3 {& G% u# @! C. ]2 P - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">) B( P8 n ?2 a& {
- <label for="runoob">Runoob</label>
; u; B P5 u+ l0 h6 i7 a) `5 t+ O - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
- E; o; o$ z2 }. i3 ?3 o4 } - <label for="google">Google</label>
0 \& B8 j( M; U# n5 G3 @0 ^ - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">5 l6 u8 I! t, W$ e
- <label for="taobao">taobao</label>
% ?5 X2 o8 t$ [ - <br>
1 `# }9 k" d5 }' J4 _ - <span>选择的值为: {{ checkedNames }}</span>
/ l8 g# \4 Z- a0 |/ w5 M% y - </div>4 n2 u( ?5 e- d; y
- + t. P R6 S$ {8 Z. ]' G4 t
- <script>; b* V0 c. z% u, y& B% v- A& {- q" H
- new Vue({: G% Y- T9 s% U8 G' U4 U+ m
- el: '#app',( [" v* y7 e& @5 f x# d
- data: {8 W2 x: t, E) @- I9 K0 _
- checked : false,7 F. u4 P. {4 s& W# C+ K5 D
- checkedNames: []
$ G: ]- b' z. c- g4 A - }
8 X# b' b1 e s/ a8 O' T - })6 |7 G2 f# d9 p4 Z& C1 ^+ v) s J; ?
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮3 }4 }. n$ D$ o4 W l, t) L
- <div id="app">
$ t) C- Q" E2 s5 W# v - <input type="radio" id="runoob" value="Runoob" v-model="picked">( E' ^' L T" u* ]0 P+ m" G
- <label for="runoob">Runoob</label>/ q; f$ w' X! @% a
- <br>$ _- `8 N/ g* O; ~ z1 y" l* k
- <input type="radio" id="google" value="Google" v-model="picked">
9 i' d* H" M& K- _; U! l# Q9 a - <label for="google">Google</label>, l" n1 l" P" T* a; w) M% L
- <br>1 x Y" i( m q# } Q
- <span>选中值为: {{ picked }}</span>$ U( l e6 m- \
- </div>
6 F+ b( ]7 I& _ -
3 R, t1 _: Z' L - <script>; e/ P6 R# t l: W: X+ S" n! w' {/ b% a
- new Vue({9 W. T; h ~) U7 F$ z. j
- el: '#app',- r* \$ p* a' c/ F; l7 g
- data: {1 A; U6 A# A" ]" L+ g7 b
- picked : 'Runoob'" P6 c+ [4 W2 w w5 n% u
- }& j/ U/ B3 }- n2 M1 [
- }). |% _' ~6 a9 G6 L a6 X2 K
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
$ X- W" s6 C8 z: n4 N- <div id="app">1 t3 x) @6 `3 a6 n
- <select v-model="selected" name="fruit">) s( k& i( ~% \+ V$ k- H) Y
- <option value="">选择一个网站</option>
- ^! H# m& \# N+ d! J - <option value="www.runoob.com">Runoob</option>5 G( ^# v- U2 ?- k1 B6 ?
- <option value="www.google.com">Google</option>' m" d+ k7 i- r. ^! S4 t
- </select>$ {. J) `) N5 a V! K+ h3 L
-
, M' v/ {; v8 v+ J9 L! u+ \ - <div id="output">. \4 k2 }- j( @" t8 f& G
- 选择的网站是: {{selected}}' Z0 e6 @; j4 t* O) K
- </div>4 k9 q4 a) H3 v9 x L4 K, {* j$ R$ z
- </div>
/ [" C7 ?4 x% y/ O- } - ' m$ ` ]& }6 y
- <script>% j/ `* ?6 R& v1 L3 E3 R! Q( Z: x
- new Vue({: D7 Z2 K& P0 j$ e
- el: '#app',& t! G( y9 a* C. S
- data: {
1 ]5 f6 M# G0 H/ X - selected: ''
& ~3 [4 x5 Y5 l# f: a" _: E, h - }" Y! G- }# x* `! D% [/ {: W' T
- })2 z: N$ R5 `; e
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
6 ^/ Z% ^% i5 `1 J- X: k - <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({
3 y* @$ z% d; d% ?: {2 w - el: '#app',$ R+ m s; f3 _1 N
- data: {& L+ j) l, K0 Z2 Z
- checked: false,
2 D% a4 r% K/ W M2 m4 J6 ^( G - checkedNames: [],
* o( q" I$ A+ q& L; `- e1 @3 d - checkedArr: ["Runoob", "Taobao", "Google"]4 R4 N8 e% e, F
- },
/ ]; L, |5 c9 Z6 r9 ` - methods: {
$ }, }* _) c# ^# X1 _- m - changeAllChecked: function() {
9 S) {5 [/ @+ C8 S9 j, K9 d - if (this.checked) {
3 V; J9 a2 I' n5 L: Y - this.checkedNames = this.checkedArr, K2 Y) h* V J+ | z! ^1 i
- } else {2 y+ l# m9 M) c7 y' R8 V
- this.checkedNames = []
5 o7 ?: x* @, V* X0 S* p% m - }" x, @8 L, x0 N, s6 R
- }& e8 S; g8 r6 y" G3 _/ Y
- },( j, k: |/ K& b. G
- watch: {
2 }: _, ` s; N0 _& i - "checkedNames": function() {
" y4 X! F! _" ~3 j - if (this.checkedNames.length == this.checkedArr.length) {; L) h: E: w% H
- this.checked = true
$ t, `- ]9 M3 P. v; @ - } else {. l5 P) Z, ~) M
- this.checked = false
' y4 K% ~* ~8 X; |7 h/ W0 L. O. O+ d - }. e7 g$ v5 M$ I& O
- }7 E% t, I' I8 J8 v) t5 ^2 Y
- }
2 O8 z9 C- v3 }& |- l7 } - })
复制代码
3 x9 x) t2 P4 Q- `8 F1 b6 I: n3 e' v& w8 |3 n9 e% W
; N j. g9 l# k3 [% `2 U. o5 O* v1 {+ Y0 V1 }- a8 Q# w1 u
& r" T5 Y) T/ p/ Z! V* l
' e1 C; m4 A9 s. H. f0 P9 F5 |6 F( a, ^$ F! d3 ?7 p3 N" }
2 R2 n5 [3 @+ T) f |