|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
) o/ W* d7 x7 r: w" k* p- <div id="app">5 q% g5 u i" p: b1 b! m7 ]
- <p>input 元素:</p>
; h5 o1 ^% F8 i& X- y& S" d: t/ o2 J4 P - <input v-model="message" placeholder="编辑我……">
$ o: F8 A" ? p6 B; K" Q - <p>消息是: {{ message }}</p>6 `/ @$ x3 }. C; C
-
: W( C1 C- L, v% e - <p>textarea 元素:</p>
% N/ S: ^5 \" v M9 s2 G0 ^ - <p style="white-space: pre">{{ message2 }}</p>
. v; W4 p( q5 k) \$ L5 a+ q" H - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>7 W5 o+ Z, B" B0 o3 S4 P/ z( y: ^
- </div>
! P: E0 E$ @1 w# c4 H& Z8 z - & P2 k; r0 l9 O5 t
- <script>- w+ G, n7 p% i+ ]. }! W" R
- new Vue({* u4 E& R# h) g3 J# M
- el: '#app',
; I: F/ X) M2 Z2 F+ Z# O - data: {% J! X! a1 Q2 }. {
- message: 'Runoob',& i" [. G& \8 [9 [7 f# D. K- L
- message2: '菜鸟教程\r\nhttp://www.runoob.com'/ Z9 W: w0 t8 A
- }+ k: ?7 ]* U6 V
- })
' r/ G, T/ _* B6 y - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
5 A/ V# G) C+ _3 R6 i. c: f8 x- <div id="app">
/ {" \( J; a/ q - <p>单个复选框:</p>
5 p+ X9 O. D/ ? y# y - <input type="checkbox" id="checkbox" v-model="checked">
- u" u! J1 H d6 z8 G - <label for="checkbox">{{ checked }}</label>
: Z' h! l( M& F0 }3 ^ - " y7 y( A2 I1 U, C# J4 \. U
- <p>多个复选框:</p>
4 N, l+ T7 A$ o1 T' h6 d- ?& n - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
( Q$ U5 s! I, c, A6 _0 |; S - <label for="runoob">Runoob</label>
9 H( H$ `1 D i7 j. m J - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
7 G' g, \& V9 G9 J - <label for="google">Google</label>
( i6 _: c' M( x- e6 P- P+ M - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
6 ?7 _9 I3 n0 @/ R" A - <label for="taobao">taobao</label>' M& P6 t% u, M/ z( x# B
- <br>' w# t$ x- y9 S2 D
- <span>选择的值为: {{ checkedNames }}</span>7 F& n9 _ F5 `6 t; K5 e1 C5 J% w
- </div>
; H2 v* X4 C1 ], g4 j+ N+ s0 m -
! e# f* U' K5 j# X - <script>% e% H1 X1 A& c9 T6 e, C
- new Vue({% C, u; l$ E: l
- el: '#app',
% D& P" n x6 B& X - data: {
. S1 h% E: S0 f - checked : false,7 U& s- c: R8 K: x+ l
- checkedNames: []) K) Z b$ u8 m' l5 B
- }' k3 E! @% ?- I; i- f* x
- })
$ Y3 i- h% c( l/ X" D# F" b - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
; l" r I/ d u' @' K& q' Q# p2 A! K; M- <div id="app">
4 z: S# G2 P8 E6 Y - <input type="radio" id="runoob" value="Runoob" v-model="picked">/ k8 J9 Y- q4 {0 [
- <label for="runoob">Runoob</label>
) p- x& g+ b, ~, J5 j3 v/ ^ - <br>
; {4 f; \0 }% z) s' }9 K! s - <input type="radio" id="google" value="Google" v-model="picked">7 s5 L D& G) C9 ^
- <label for="google">Google</label>
" B$ a( L( j1 g- C$ c) }+ g - <br>
; Y3 q; o0 S9 ]1 u* |2 C- o, w - <span>选中值为: {{ picked }}</span>
& K* l' S# A: |+ H* l9 g1 d - </div>" Q( p0 O( ~" F9 v+ }
-
+ }/ x; e2 R0 H - <script>
4 h o1 q8 q ]& U( k! _- e% m - new Vue({
5 O9 ` X C/ p# N - el: '#app',- u; o- W: w$ C- q; v( k. ~
- data: {& e' G" C: S; p
- picked : 'Runoob'
' i3 b* i3 l; ~9 M( T - }) a' F4 ]$ F! ?" B8 k
- })
* f! q* B" W) Z# [ - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
7 `! _& y- X9 ]2 M0 t* `8 ]- <div id="app">
; s7 N& q4 n, |: `; [ - <select v-model="selected" name="fruit">4 X0 E- y( j# ^+ {; Z; ?
- <option value="">选择一个网站</option>
( s) A! [! p. e - <option value="www.runoob.com">Runoob</option>4 o: t& ~ F: r; L
- <option value="www.google.com">Google</option>1 |6 l$ J9 r, G7 J7 p; V4 G( S
- </select>
% d& B' e5 z) q" w% X0 ?2 H - ; ?3 }* Z6 b3 _& g- M- i
- <div id="output">
0 `" ]+ o$ c: S- a' o" R - 选择的网站是: {{selected}}
9 R& j; W, V5 l$ z, F - </div>
( }3 r* ]8 w4 Q0 Y - </div>
: P1 I G# F% c" ^" a -
. {1 ~, H2 R7 T; R/ v- t$ Q! e - <script>0 w! O; A, R# O% E7 W5 B
- new Vue({
( I. |1 m" T U& Z* } - el: '#app',6 {! u* o$ L) l
- data: {
# p, Q) w4 S# r+ F7 P# {: ~ - selected: '' ( L- [8 X6 S+ O2 b# c
- }
5 P1 [# T% n) C4 ~ _( w - })
7 G m- T4 e. \7 A - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
) v3 i' h0 o5 o - <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({
: W7 [7 |$ a) q0 I - el: '#app',
- T, _0 a' K) W' n4 R - data: {9 o) y# g) n) ^* j, `. {$ D8 X
- checked: false,
+ y* C7 F1 o# k. f - checkedNames: [],
- u) O+ g. R5 Y* N( O - checkedArr: ["Runoob", "Taobao", "Google"]) o; m1 g( i, i) O4 X( p0 g
- },) M4 ~! {7 w6 g$ O3 x. o* V s
- methods: {
2 C8 K' b/ n( ~% _$ ] - changeAllChecked: function() {
0 @; b/ {8 h2 ^) _5 d# ]! U - if (this.checked) {" ^) S# c: _1 O
- this.checkedNames = this.checkedArr' M" G2 [, H; `2 {- _3 \7 |0 C% d2 j
- } else {
2 N7 u) G1 y- B j, A - this.checkedNames = []) R- E1 X$ z/ a- a3 w
- }
0 p$ u0 a' ]. y7 b8 \ - }7 d. u* @( ` L/ g- d
- },; a! a& p/ X- x4 b1 B9 ?4 ^
- watch: {3 ^$ X. ]6 I- C$ ^* V; Z
- "checkedNames": function() {
" r/ X: v8 d, F* a: v - if (this.checkedNames.length == this.checkedArr.length) {
8 Q1 v! Q2 K- e6 F - this.checked = true
1 d; N0 ] v2 f6 S' @8 L - } else {
& i7 S' u" _/ j$ y! T - this.checked = false
( p0 F( K+ ]" ?1 g - }
/ M2 i2 A8 S, A; X2 E. Q - }2 f$ A' [( v1 |/ n
- }6 Z% @, Y; X: z2 S: G, D8 j+ [
- })
复制代码
3 a5 ]6 A! D- T9 ~. f( Q
9 K( Z+ g" L3 n
& U, {/ a8 \3 |6 k3 u; k) X& x
1 x5 |0 F7 c6 k( O5 `
5 I/ E9 z$ r) I2 G2 t
7 D+ ?! z) C( F2 Y5 R% d
: o0 _* L$ G( e- l$ _+ y9 j3 V5 n0 ^) S; A- V4 y7 Z
|