这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
f: g" |- Q o! c+ B% ~. b- <div id="app">0 u2 H& d1 Q( P7 @
- <p>input 元素:</p>8 O6 M# v/ [& s& x( {. {+ }. K
- <input v-model="message" placeholder="编辑我……">
4 |$ h6 {" c* ~+ L; f - <p>消息是: {{ message }}</p>0 k. O2 O( l n* D3 `! t9 G
- 3 S, w1 V- N, B# v0 l
- <p>textarea 元素:</p>
" l! j& l3 i' C8 v) M+ z - <p style="white-space: pre">{{ message2 }}</p>
1 V _- g$ L" ~0 c" @% y/ d - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
5 x' M* h- g* j - </div>
5 @6 P. `; L1 V! W" k - " W4 n8 X5 c1 f, {2 O
- <script>
) ^% p, |7 [# E; Q- _ - new Vue({
7 [! \3 x9 s C, P8 r - el: '#app',
5 `6 P; Y) o! f6 X7 T - data: {: |- {5 X3 ~" W( |/ b
- message: 'Runoob',
! b- A V' h- S3 }& N6 P" N" s+ u. K - message2: '菜鸟教程\r\nhttp://www.runoob.com'
' S1 c, U' r/ `+ m! S - }# I# e& z1 v/ m
- })
# ^8 |# ~% p9 z( j1 ^9 _3 W5 E7 ? - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: : f; ~* Q: y+ {
- <div id="app">
, o3 l3 g/ _7 H - <p>单个复选框:</p>$ T! V: A0 }7 `% h6 I P) G. l, A
- <input type="checkbox" id="checkbox" v-model="checked">( K/ j2 r& a/ k2 W8 \" Q8 D
- <label for="checkbox">{{ checked }}</label>
; `% H m8 \' ` - / s9 ?) c: d: g6 r5 s: J
- <p>多个复选框:</p>$ f4 d H. q- k& n. M. Z
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
) g% v6 i9 r+ C, t - <label for="runoob">Runoob</label>
# d: h' c, G/ ~; n9 O( R! } l7 R - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
8 x K4 v9 K! k2 g - <label for="google">Google</label>; K. q$ w6 H1 F* g; [
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">* K1 J" \ w- j I' v2 h
- <label for="taobao">taobao</label>
+ @7 r* Z3 b+ D0 m5 ]9 a. |+ s - <br>4 A0 I: z7 N) `, a! _- L
- <span>选择的值为: {{ checkedNames }}</span>
" Z/ K' e( M! K( X# q. Z - </div>$ L2 u) t3 C; f8 Y( m( U6 }' k8 o
-
0 M) G9 T& G' T. N# S9 I4 }- l% u - <script>
; B- @' x( b% e# h2 B. [2 f$ n - new Vue({
; U8 d- u6 x3 n2 x# _+ x - el: '#app',
/ [- S' J8 c) }! P; F& S. x/ O - data: {& C9 [) c8 O4 n, q4 I* \# D7 q) @
- checked : false,
7 X$ q9 c% D6 e3 c& T; I* L- F - checkedNames: []7 S) ^4 ~4 w" Y5 d
- }5 o/ ~2 H" v5 O* \
- })5 M' f' Q; G' T) |0 X8 J0 V& @
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮" g& W" `. x* Q; a* a9 S. e7 @
- <div id="app">
! u- o8 V) m% m9 ]: l: m' f' k- t - <input type="radio" id="runoob" value="Runoob" v-model="picked">( k6 G7 J# L- R' h% ^
- <label for="runoob">Runoob</label>
) }& e- U0 P' x$ i2 O; K - <br>
8 y% Q3 |! O3 r- V3 K - <input type="radio" id="google" value="Google" v-model="picked">
" f% W& H: Y2 R6 N - <label for="google">Google</label>
4 p" G6 ], o8 ?7 ~& ` - <br>
6 ~. S" g: ~5 K/ m7 y; J - <span>选中值为: {{ picked }}</span>
5 j! \6 ?& `& i5 q5 L2 [6 k5 S - </div>. V" {$ f* X2 B( ?/ p% ~- S) W
-
( I s* C, t. T- M - <script>
0 B9 k. L5 v4 u - new Vue({
- B/ V4 Y/ S/ M - el: '#app',
: k9 U# b, H J) d4 z( o8 x - data: {' M q' l' F% W' A, s2 p8 {- @
- picked : 'Runoob'
# O$ [& C2 m& O# S& t - }
3 k" Q/ [3 C4 b' u: e, S+ u - })- V1 N8 {5 T6 ] l6 {9 G
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select0 I5 m! h: L+ p, i
- <div id="app">
) d; x0 X# t! D3 R; B - <select v-model="selected" name="fruit">
! {8 V% j; Y: w: E% B - <option value="">选择一个网站</option>. p" [: g! ^$ s. \
- <option value="www.runoob.com">Runoob</option>& J- ~, I6 I" M- I8 i1 a4 M' q& ~
- <option value="www.google.com">Google</option>
* F% ?! K7 g! x9 Q - </select>3 @) H! r* |9 n: \, e
- . \" W4 j/ `5 ], u& I
- <div id="output">& [! ]1 a: b F' Z
- 选择的网站是: {{selected}}
9 u* y ]/ A/ P4 ~: J - </div>* b. {/ D- y4 a4 ^. X5 U
- </div>1 P+ N8 V; D) O. R: Y/ B
-
8 `4 L8 @/ X3 [' K$ ~6 [+ H$ c$ p - <script>
( |0 L/ T5 D. Y0 R' s. S* E0 G F - new Vue({
7 T& Y* F0 n3 B/ H( \* l" j0 H - el: '#app'," X) H' v2 l g% y! J( J3 P+ [
- data: {/ `3 F; j" [. M3 r7 o5 r- Z" ~
- selected: ''
) |, l. j9 P# I) r& ~* V - }- [, e0 j* v8 @& x
- })( b5 X9 h- \; r# V1 F# T' _
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
/ }. b( |; ]% d' p1 ] - <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 W+ u" _- N9 A) w, A1 [" a6 c1 O h
- el: '#app', r. ~* D' Z. z v
- data: {
, N1 Q! p! T# Z - checked: false,
3 V E' Y, `6 [0 k W1 {% L - checkedNames: [],
3 B0 [: H% x ?' ^% R- ? - checkedArr: ["Runoob", "Taobao", "Google"] s$ G5 c! w% f' n' ]- q3 n& K
- },
* U7 [. n' a( B4 Z, w7 S - methods: {
H( G4 @! M% v. Y - changeAllChecked: function() {- ]# y: T R/ |' n) G
- if (this.checked) {
" T. \8 @6 d4 M( c1 e$ E - this.checkedNames = this.checkedArr I O/ d m" K/ d+ l
- } else {9 l d" K- c& x& |+ p( j+ u0 o
- this.checkedNames = []
! M* {* P2 ]: h - }7 o# K x6 {3 K6 u' N
- }
3 ?) }' q, N# D0 \7 _; w6 U - },/ q/ r0 r) v2 `' n
- watch: {
; P- b$ g! ?% H - "checkedNames": function() {
/ M" B. Y5 ^) U# \$ F* {7 C7 u; B - if (this.checkedNames.length == this.checkedArr.length) {: L) o3 W" d! N5 t+ ]" k
- this.checked = true
& B2 [3 R8 V' t+ j( w - } else {
2 l! x I2 B/ x$ `% N - this.checked = false/ { R) [! n: T/ K) k
- } U8 Y O" V+ F' q) X" W
- }
! A% h4 f# _5 a4 p9 d - }' X( X s8 C4 @4 K
- })
复制代码
$ V) j x5 Z6 q. R+ p7 x! t, ~" A. a* {- v3 _4 T
) Z, T2 n0 T- Y$ D
- Q: F, }& c- ~/ Z' Q; D- u# t& m. \# E8 c9 e
7 k/ _. Y! m9 o3 P9 H* W8 `/ E
3 J% l8 B. N- H2 B7 y% b1 `: X x
5 P/ J1 t% ^# [% p+ ^ \ |