|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
3 @4 W4 L7 f8 |9 z/ v1 b- <div id="app">
: D6 j6 a2 j1 e# o9 L - <p>input 元素:</p>
5 Z" e1 U9 r2 H3 a+ ^( ^ - <input v-model="message" placeholder="编辑我……">! d* p% A. ^: ^& S- y! U- }% D
- <p>消息是: {{ message }}</p>
2 S) {4 Z! M1 S! C6 M2 N, ^3 g5 s - , i$ ]2 x0 A3 E( _* N. O2 v6 V6 O
- <p>textarea 元素:</p>
% m, X7 R3 M3 Y- b# R - <p style="white-space: pre">{{ message2 }}</p> ?( Y( Z& ?6 L* [) a- j
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>. f( s2 Q( x5 L4 J9 A9 v5 l! N( S4 t
- </div>
! _+ P$ U0 G3 w - 0 u% z& B: I" c3 s# ?" T% n$ ]
- <script>
: ^$ p4 K- _% R/ c. }; D - new Vue({
1 Z) z5 |; k0 A2 L1 i - el: '#app',
2 `7 g5 e# s8 n9 M" D6 ^ - data: {3 m, Y, M0 X) Z7 l$ M8 U0 A$ ]# C
- message: 'Runoob',
- y7 s3 r3 W7 c2 G" ] - message2: '菜鸟教程\r\nhttp://www.runoob.com'. }- w, y5 A! p
- }$ f: g8 h7 |3 r. ?8 Y
- })
7 T% I/ g2 y3 E, i" Q - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: - O, W2 l! }5 \" p
- <div id="app">( h$ [/ O9 O% n% u4 e( r
- <p>单个复选框:</p>& f F' R% ?4 }. J& v" |! _. K3 x$ M
- <input type="checkbox" id="checkbox" v-model="checked">9 C, F5 u& o) Y! p
- <label for="checkbox">{{ checked }}</label>
0 L! R- H# }$ d4 G - # T' }+ e7 }0 S3 U: {
- <p>多个复选框:</p>' `7 u' N9 ?, u! v9 t6 w# V
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">5 O- A! {! D, I; W# ~
- <label for="runoob">Runoob</label>- U8 r! v; i! K: E" [ H
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">+ s& ?7 g" {; ~, I: e8 m
- <label for="google">Google</label>
* X" o2 P0 ^( f/ X. U; x - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
* v9 D. S2 f3 e3 j: H9 W - <label for="taobao">taobao</label>- I; t- O ^( [- v# Y! Z) x, x
- <br>
J4 {2 O0 p1 j4 C+ }1 @ - <span>选择的值为: {{ checkedNames }}</span>
& K1 z) _# L9 P, h7 D- s( M9 `$ z - </div>
+ e( k: x/ N' k -
/ d, ?, \% b; b - <script>0 h7 B8 L+ y7 \* S0 s
- new Vue({3 k7 t c# a, `3 n# e
- el: '#app',
" F0 n6 J; J b% D' R6 Y0 C - data: {5 ~, Z* ]& W$ g; H
- checked : false,0 a9 C5 h% V; v8 p+ E) G- L
- checkedNames: []
% T- W8 q( Y# F0 L1 s - }4 Z, T5 m) W1 U; G! d
- })
4 ~; H& Y8 s8 z; S: Y3 f. u6 Z* i8 _7 h - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮3 C+ ^2 t6 ^; C4 l9 s" G7 G
- <div id="app">
5 J, J* O; ]0 }5 Y+ n - <input type="radio" id="runoob" value="Runoob" v-model="picked">3 f( O* c+ B7 ?; R# B+ j
- <label for="runoob">Runoob</label>$ C6 X$ t3 H7 }. f2 R
- <br>
1 s. I% g- {9 p, q# o. V - <input type="radio" id="google" value="Google" v-model="picked">, f. R; H- W" `' S. C1 o2 R
- <label for="google">Google</label>
# V( c3 {0 m5 o3 V7 x0 f - <br>: }" v+ ] ~9 q5 W' c
- <span>选中值为: {{ picked }}</span>
9 O) M: L4 O# ]- L) F6 _ - </div>- |6 Q& M1 a& Z5 f
-
% B( F% w9 @" u7 W$ K - <script>8 @* a8 j, |3 ^% ]5 B0 `# W
- new Vue({1 W1 R9 D, l+ ^+ c# r( [- f
- el: '#app',( C2 G l- f: H" v
- data: {
w; u% b- `3 X" C9 M, l - picked : 'Runoob'. p _. v6 O* w2 \9 S
- }$ C! h8 {3 G% |+ X. M" B: H
- })/ Q$ ~; x! ^6 |$ ] y
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select7 [& b1 [3 I5 Q, i q: ?1 q9 l+ C7 \
- <div id="app">6 r) _* h0 U; `" Z
- <select v-model="selected" name="fruit">9 t- A/ r" b; u5 Y, J4 ?/ a
- <option value="">选择一个网站</option>
2 n m+ _ @ {9 H5 o/ V - <option value="www.runoob.com">Runoob</option>
6 @. M4 \ l2 e7 ~7 j: ^' T- r - <option value="www.google.com">Google</option>4 f- B+ h' y* m, }( X
- </select>
! Y9 E. P8 R9 B -
( _6 Y8 `. D8 @! P. d7 G8 D9 v* U( t+ Q" ? - <div id="output">
4 X$ k1 b! q' X, z! B0 s - 选择的网站是: {{selected}} O/ _3 r# q+ u: g2 c- r+ \$ U
- </div>" ^* z! {, y/ Y. w
- </div>
7 I. O3 @5 O& v; t - % b" S$ j- T$ U0 G
- <script>
' {- C- Q% b9 n2 H! {+ r+ y - new Vue({: D6 g1 g5 `. j4 G m
- el: '#app',& G- v/ q$ P( ~" R- f+ a' e
- data: {( W% T" C* \, d' H
- selected: '' $ a& o+ Q& h3 C7 @6 A/ O" m# o0 m5 c- O( A
- }1 E! [0 L* o6 q4 n! Z
- })) O+ D9 I, J! _
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->+ c) i C5 M" w4 m5 k2 ?
- <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({( G/ O# R* H( e; {3 Z
- el: '#app',
4 q$ Q2 S) m. Y, @7 U$ C2 S& Y6 } - data: {
! V0 w. x4 I% G: ? e0 _( ] - checked: false,
7 G# S: s, l/ |; g) u7 j8 B - checkedNames: [],
) M4 a2 O* u0 B- h0 }. _ H. U - checkedArr: ["Runoob", "Taobao", "Google"]
' V: D5 W8 y& c - },
# @ n6 F4 I: s" u, P+ o - methods: {8 ~5 V" ~6 |( z* g R* ^, z
- changeAllChecked: function() {
" y0 f n; {; ?+ [6 ^7 b - if (this.checked) {
! i2 d8 e/ B2 k% U6 ]3 @- P) W, U - this.checkedNames = this.checkedArr
- x$ [& U, h$ | - } else {
! c; A" _8 \4 e1 C3 ` - this.checkedNames = []" J+ k& ^9 S9 e/ n6 {" U+ W
- }( Q) g+ S5 m8 K' i n8 g0 m
- }; a% X9 u6 P3 t" ~, t% |3 X; x* H! @0 j
- },
" y6 J$ ^3 U9 j4 D& | - watch: {. o& T: N/ k& b/ L- I5 S3 D! k
- "checkedNames": function() {8 S$ K4 ~3 \& T$ `+ v7 n& R% Y/ ^' E$ P
- if (this.checkedNames.length == this.checkedArr.length) {( S8 c1 o/ g: n' g+ ^+ v
- this.checked = true
7 m+ z; _* p$ K' a8 X - } else {7 P3 e9 g* a f# T: Y& L; Q9 K
- this.checked = false0 q: c6 a) V+ J1 F2 l Z
- }& ^( b3 f* q* m3 E% z M
- }+ H# I$ I0 `+ |
- }( a% F, X; u# Z9 s! \$ |
- })
复制代码
, _" J0 Q) W5 j' \, y) n0 y3 C, @9 M( L. T+ x' b+ ]% ?
. q/ E7 I& T; p
9 w2 L) C: B2 ?4 f; u' d
# z9 a; t. o" m# z5 G& t: v# ]
( I; [: y7 H* G: A( X
+ T; _# g( A6 u7 v# ~5 u. O% s, \2 A, ~* z# U$ H3 P
|