这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
, j: R0 ?# h9 y- <div id="app">* m" v4 J7 N" A7 M
- <p>input 元素:</p>
( a( T i, G3 G5 Y: V - <input v-model="message" placeholder="编辑我……">
5 T+ X; ]5 I* a! v7 r b" ] - <p>消息是: {{ message }}</p>
& ]* x; _: K# ^ `) [ - 4 \6 r+ h' c ?% J% e c
- <p>textarea 元素:</p>% _5 {6 [% L5 I) _* y' @
- <p style="white-space: pre">{{ message2 }}</p>
/ V( U: @" y" }* W P; ]2 U- V# w - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>% O a( [; R( k1 G4 h9 V, M
- </div>
* }- b2 H# X2 c; O, b8 ]7 q - 8 a" P( u9 p* W' L
- <script>( l9 C$ \) P5 O; C* p
- new Vue({
# Z3 x2 p3 Z' y+ { - el: '#app',1 i2 P w- U- @: j, A5 b
- data: {
1 E! _+ ]3 a8 u! s4 n7 Z( c9 c - message: 'Runoob',2 G6 Y5 ], v- h! J( q" X
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
8 p. }/ x9 v& `5 Z: f2 G - }
0 E9 |( `- w$ W/ P: g$ i4 `* i - }): b5 w! @) p' d" _7 m- d( y# D
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: , y! @+ C H' ^% o
- <div id="app">
6 D! J3 G6 r$ g/ V/ e6 I! | - <p>单个复选框:</p>
2 U! s/ ]8 K. c' _: a - <input type="checkbox" id="checkbox" v-model="checked">7 y0 Y: ^: ?7 C( m2 o2 u9 w( r
- <label for="checkbox">{{ checked }}</label>) j, E* |# O/ k& p/ y
-
7 C9 }3 f$ d6 o% F- D/ H: O - <p>多个复选框:</p>9 i0 |2 c: q% d6 @- n# E
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">4 v* v) S# `8 ?" _) s8 s: R
- <label for="runoob">Runoob</label>9 ]& g, G- d4 {; v7 {
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">1 \) f& f. w8 b$ h. P
- <label for="google">Google</label>$ W* M$ ]. i% i- p9 A7 F& N
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
/ D& E0 k6 @- q- x3 e, Y - <label for="taobao">taobao</label>/ k& A* `2 M; K* b5 P) U
- <br>% q# `7 _7 [* C0 ]) O- e1 C
- <span>选择的值为: {{ checkedNames }}</span>
. M) a: I! u1 @' ` - </div> C( F1 t+ L3 D R* F7 a- ]
-
' v( v8 e! m @1 t - <script>
$ ^- W. B! Y! e9 w6 L" b - new Vue({3 [6 z6 V9 q( d: I. ^8 t
- el: '#app',
; `6 s8 B0 B+ b% E+ M - data: {( ?; G4 e7 t4 [2 [6 ?
- checked : false,
+ w' ^: c! B, x# R2 T/ a e1 l$ F4 R2 O - checkedNames: []
^7 j4 p& |* E7 d Z& h2 ~' v - }2 S0 H. o1 e, P* R
- })/ d5 i% h! Q, t% `; U9 E- m4 C
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮3 f# J4 z7 g& h$ d- z! r: r
- <div id="app"># X8 _- \# U5 a0 y1 S$ u
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
) }3 V- X- |* q* y1 j - <label for="runoob">Runoob</label>8 B$ d! c, [; l0 L+ }
- <br>
: Y3 x$ V- i% |0 ]8 c6 _% E: u4 j - <input type="radio" id="google" value="Google" v-model="picked">: i0 x' ~. S; m
- <label for="google">Google</label>7 N' D7 h" Q: H
- <br>2 v5 P8 S, ~3 l& o
- <span>选中值为: {{ picked }}</span>
) S) G' X t8 @2 G \2 v - </div>
' E0 f- O7 y: ~: }8 P - ' K3 o& H& i+ g! {
- <script>
, k" p5 `( o; S1 o - new Vue({
' e" w1 z; J; r+ u; }1 Q+ m - el: '#app',
* N3 M5 z3 g( p - data: {% z f4 p9 ?) Q1 T) R
- picked : 'Runoob'
* m2 `. p+ e# Z4 U7 `9 I9 { - }, e8 u9 M6 x) F! n
- })
9 m" ^5 H6 S2 A2 n1 e - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select* c, z2 W4 x: P4 P$ V& N1 h
- <div id="app">
9 m% I* t% R& w7 m- T' _ - <select v-model="selected" name="fruit">
5 b' I- l1 L2 o9 _2 G7 h& x# U9 p - <option value="">选择一个网站</option>* J }7 m2 j" S! M
- <option value="www.runoob.com">Runoob</option>
- l% C& y9 V8 _8 q) g2 s( o - <option value="www.google.com">Google</option>1 W4 ?$ n3 \3 s/ _* U
- </select>
( W. j4 T; h( |2 o. j: o% b% b -
: Q4 Q: l ~/ ~( \1 C9 _ - <div id="output">
6 F8 \4 N3 B' N! { - 选择的网站是: {{selected}}
) M6 \9 D' ~1 {. s5 p - </div>
7 [/ s' J0 ?% w9 M - </div>
; r9 |" X6 ^! M5 d - 4 K: c/ {* n' t
- <script>
/ E' K B1 W. o3 M& |4 z: P - new Vue({
' n( y1 z# Y' \$ Z5 m1 v - el: '#app',
. _# G: d7 E/ v6 G+ _/ b8 |7 s - data: {( h6 R1 s% ~- A+ x
- selected: ''
& N) [' t( E- t; L - }! @! ?( i; `/ x& H5 W
- })
n! s5 n) ?+ c: g& Q: t - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->6 W2 a" T2 e2 [- U. T `" J
- <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({6 m* C* \7 X/ _! k: y
- el: '#app'," [) |& ?+ v' s8 z) C
- data: {& H8 m) H" a* ^* s$ t
- checked: false,) x' i+ S# a2 O" l: @4 a
- checkedNames: []," m/ ~0 M" O- {/ D$ e8 ~) G7 N; Q
- checkedArr: ["Runoob", "Taobao", "Google"]* D/ a A/ M, E0 n" U' e" u
- },
, g- Q, ^" w; U( g - methods: {
T" ]& i& k" ? - changeAllChecked: function() {
. ^6 ^: s; A- F - if (this.checked) {/ b- W& c/ s% }# j5 Q" m2 V
- this.checkedNames = this.checkedArr
; q/ q3 I6 C6 z2 ? - } else {* C+ {0 J L/ y" y$ L/ h5 V
- this.checkedNames = []
: L4 _! x& s: d/ B* y - }0 l+ I9 x6 V6 w5 C* p; w/ @
- }
6 G9 \+ b0 b+ S - },
2 ]8 {9 c& R( U2 M" A% Y' T - watch: {8 r% p3 V; }9 x" c# `
- "checkedNames": function() {/ y4 l) E9 |- p2 O ~6 a5 k% _
- if (this.checkedNames.length == this.checkedArr.length) {
$ P. q Z# z$ ^1 k+ L - this.checked = true
& {. l3 v' W5 h - } else {! {/ d( j0 C* N" ]. W+ Y$ W
- this.checked = false
# P: t4 a6 \6 O7 S; ] - }! @9 n) y% J4 ~+ ]
- }
7 B% e+ ?. C+ Z& a9 ^7 ~5 L - }
3 h( F2 F% ]0 Y) N% s/ B - })
复制代码
$ f8 ^9 K/ c; |
7 l0 Z4 g# R- g" ]9 E6 E, Y: G9 G+ n. _3 |" a5 F
$ `) w- I5 X- a( _& r6 g# i
6 R$ [! |+ ^2 Y! z8 L* P: l+ h$ L( O9 X6 \2 ^- c9 [7 c
6 x' h t4 ] a" `9 R3 C- {; X
6 a. G( Y% T6 q( M" G, B' n' U
|