|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: & ~7 ~% ?. r! i) J0 U
- <div id="app">8 b: ^6 n0 _; Y% l
- <p>input 元素:</p>/ U5 U1 K1 ?( i( e5 u+ r/ c- X. G
- <input v-model="message" placeholder="编辑我……">, s5 Q: ^. l5 B
- <p>消息是: {{ message }}</p>8 j% ^2 j+ g; J2 e/ r1 ?# ~
-
; M" d% P( F% j% K1 U; U/ J* ]. J* c* _ - <p>textarea 元素:</p>
7 x' z+ I0 _. k5 Q - <p style="white-space: pre">{{ message2 }}</p>1 ]5 o1 H: [1 O9 U# N
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
- O; p8 l& Z2 O) s: p- `) n - </div>1 w9 ^/ X) i) Q$ w
- 0 c/ M- j/ U- {# s0 D0 K
- <script>! s+ E) @6 o2 B, r1 b! N% N8 \
- new Vue({, Y8 f N/ Q. P l, c5 `- S
- el: '#app',
8 _; k* Y4 o, z+ z - data: {$ i- | V" F& o& w0 ]
- message: 'Runoob',
; S# g( ?3 L# P6 t6 p - message2: '菜鸟教程\r\nhttp://www.runoob.com'
( `3 T7 I6 v: F; \ - }
/ ]* |/ A0 z" r# b - })
! ~+ r+ G9 ~8 q, g# p a8 q/ i - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
4 j) U' K3 z8 D( R$ W6 `" Z- <div id="app">
5 H) w3 z8 ^: T3 k - <p>单个复选框:</p>8 J4 e, ]8 i: ?1 `2 C0 u Z
- <input type="checkbox" id="checkbox" v-model="checked">
: Q$ e8 Z, h2 i% l7 p7 ^2 s) S - <label for="checkbox">{{ checked }}</label>
, A' m% t9 x4 R - 9 A: Y5 M- j/ A. v0 _& V9 U1 S
- <p>多个复选框:</p>
+ I2 @6 B- b& E6 Y: I! S4 F4 W - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
$ X( j9 t& p% d. L: f - <label for="runoob">Runoob</label>
$ T+ A5 n8 B" A. w - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
# v( V4 x" \: F - <label for="google">Google</label>
1 G8 \' R$ Z! x) @: W. ]1 p' ]( i5 Y: p - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">; Y) `* z0 l9 r' B+ S3 V9 D
- <label for="taobao">taobao</label>$ C+ w2 L( o) @5 T8 e; G" R
- <br>; Y8 m1 i2 \' Y, ]
- <span>选择的值为: {{ checkedNames }}</span>
7 a$ K: w6 Q2 i$ z1 g' x" n& c+ ` - </div>( j- z0 o7 b5 {5 _8 c( e
-
# O% u$ g L& G9 @( L - <script>
$ W, Q0 h& E! Y1 j) `" l - new Vue({
{% S% F% F% A7 { - el: '#app',$ C, y4 i$ ^" c8 j
- data: {# L5 a: ]. C' `' Y
- checked : false,
+ R' F* r. b# t) |3 r ^0 r7 p - checkedNames: []- N% x% D v r' L, G# a
- }
. I# \0 Z. K' H4 x - })& |8 W2 ^' o& {/ n& a% B
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
! }; d7 u4 \ ]5 f i- <div id="app">) e% u# h j% X% W9 z2 P& U1 I5 Q
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
9 @1 i0 Y3 D$ Y2 {" r7 u1 o6 A - <label for="runoob">Runoob</label>, F( I) `* |7 S
- <br>
2 M" W" ~9 f9 b( m. D7 Y% F; `4 q- y0 H - <input type="radio" id="google" value="Google" v-model="picked">7 a: p, o- @' F& h9 l ?) v% x7 E
- <label for="google">Google</label>
4 v4 i, X- r) Y2 f* m c+ `+ ]! O - <br>0 u3 Y5 D- ]# S8 H* B
- <span>选中值为: {{ picked }}</span>* i0 M3 W6 i: W1 m) f0 O+ {
- </div>
! `& ^: z6 h1 i. L -
' o8 R- J, V( \0 k5 }$ K# g - <script>
! g# `: F9 G. Y$ e( B# v- N - new Vue({. u2 G% R/ T0 _4 z0 |2 l- p
- el: '#app',0 d5 p* b& m0 P/ e! D
- data: {
0 ^: K7 F P* z' { F6 o' i - picked : 'Runoob'
# r) t2 _* k- F [- V - }
; ]9 n2 [4 |9 v8 N9 G, V9 k - })/ ]$ V0 }) ?7 x1 q- W9 E/ a w
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
( n) O0 P" y5 \7 q& b) m- <div id="app">3 I" C& ]& [: M$ `! V: T K
- <select v-model="selected" name="fruit">
% z: } F9 [) J1 t; K; z: h - <option value="">选择一个网站</option>, M+ t) B. ]& `" E8 N( K1 A6 r& f. J
- <option value="www.runoob.com">Runoob</option>8 l! X+ D$ v) K( D& }
- <option value="www.google.com">Google</option>& h) o/ _, {& w0 I
- </select>& g9 }# T- l8 y" M- B) {
- . e0 ` J# H* k; o, s
- <div id="output"># C; P2 \! O! B
- 选择的网站是: {{selected}}
& G' e! r3 e& b9 V( G8 C2 Y - </div>
; ]7 ^% a2 U; F2 F+ T - </div>
* I0 |4 h2 d# r+ R5 G0 V: S - N, L# r6 _' @0 V( O* \$ K
- <script>0 i+ }: u3 J3 g8 [ ~; o* `
- new Vue({% D+ R7 g0 _1 J3 {
- el: '#app',
0 E4 T3 k# U8 w - data: {
6 S# A2 t$ }1 a9 v9 \. K/ k" i - selected: ''
% ^9 i O7 d8 C, c) v - } T; Q& H: c5 A3 U( W
- })
, `/ v0 b& Q& L/ r - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->" S- m) b& r- `8 h. k- k. G9 a
- <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({
/ u+ i7 }- O# Z9 J) \2 \1 N - el: '#app',
/ \5 i7 Q4 G* Q1 V C - data: {4 G6 O* \- a. u: x1 H
- checked: false,! v8 b3 u/ e+ G a1 k
- checkedNames: [],% |- N: q k( ~
- checkedArr: ["Runoob", "Taobao", "Google"]
! J) l# y( }' v. l: @ - },& o: q( }2 n6 b+ r# z' e5 A
- methods: {
6 T. o7 M! ]4 c1 _4 `, l - changeAllChecked: function() {
- l' w" R& K; {$ ^ X$ H1 w1 H - if (this.checked) {9 d r$ H/ O( d. I
- this.checkedNames = this.checkedArr
6 I3 A& ~; C' k5 c+ _ - } else {
8 u" N& b/ O) N2 t3 ^ - this.checkedNames = []
7 I* U: M% i6 U$ O" Q7 x) B - }8 O3 R+ _. V5 z! B, n# X1 m7 |
- }7 _$ c" }1 V$ V4 l: f
- },/ e. D1 [, X: X9 F
- watch: {
6 m a3 |, a' Q- D) a+ u' P8 V - "checkedNames": function() {" C6 N0 O' \5 f) h4 A
- if (this.checkedNames.length == this.checkedArr.length) {
' H4 B# `8 F" k( c, x - this.checked = true
' p; m& ^/ k" x# m* F- J; P0 f - } else {
3 [' H9 B: v- g! V1 O$ R/ Z - this.checked = false" E1 T1 i D' w7 ?
- }& }( ~, T, w7 i* D0 j/ D; k8 j
- }' K0 E& Q, e( k- v& B
- }
& O5 t/ @( P E! K - })
复制代码
8 {7 I8 ~+ n3 ~5 ?- i9 z( E
% F/ V1 B9 B$ P8 P
0 y2 C0 `8 t/ p; b) U o' @$ y7 ^; y% g8 c# [" u. r5 n! W( Z: _
, }& e8 E8 Q. z8 Q) C
9 G9 j" B0 U7 O
9 t6 C' D3 B4 p5 d. K9 h
p R$ w& S: e$ D |