|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 2 |1 a/ M% e* ~* F5 A
- <div id="app"># p: C u8 j, u, j
- <p>input 元素:</p>$ U. A! C8 n+ O e; H: q0 z2 O
- <input v-model="message" placeholder="编辑我……">% ^1 Z# D& D e
- <p>消息是: {{ message }}</p>1 b7 M1 {$ o3 v& ? Z5 x
-
, |; }; G7 g, ^6 o& K - <p>textarea 元素:</p>
) Y, ^: k9 i- a- W( Y - <p style="white-space: pre">{{ message2 }}</p>' U2 f9 f/ \- x
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>. @! U( G) y8 o/ s9 Q3 c1 N
- </div>
$ Z3 A, l) n$ [' c. F - / R5 k& s5 ?" E3 B
- <script>4 ~2 j/ g) l8 { c' y) }2 j6 N/ K
- new Vue({/ G+ o) K7 o d c
- el: '#app',
5 H2 G; ]4 L( c+ N* Z - data: {2 f1 W7 d# l E% s; D
- message: 'Runoob',
! z+ [, `! M W3 H6 W' L% J9 W, f" i - message2: '菜鸟教程\r\nhttp://www.runoob.com'
4 P$ O8 O" T# l; \ - }
( f/ P: K/ j& Y" i - })
5 H( t3 I/ I9 X1 |8 O! I9 B' p - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 1 a% V: F1 Y- T5 _
- <div id="app">
) e$ t3 P& H' J- R( B$ r% i - <p>单个复选框:</p>+ a$ @4 I& ?) ?+ D% i
- <input type="checkbox" id="checkbox" v-model="checked">
3 l2 A5 ~0 o" T0 h3 O - <label for="checkbox">{{ checked }}</label>
* A% b! G0 E; V - 6 L- }( ]- ?! s- J/ h$ k
- <p>多个复选框:</p>6 _: x3 r2 t3 w* s2 l; D" B) _6 a
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">, H0 y4 s+ o, a3 b
- <label for="runoob">Runoob</label>! i; X& n$ R/ _# f0 R) y) I0 S
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
1 M4 H. F; ?1 V: H+ g G0 f6 b - <label for="google">Google</label>4 P- U* s3 l- J& E; l5 V
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
, r; m0 T- U5 M - <label for="taobao">taobao</label># @- ?0 k7 O$ T# Q! O
- <br>0 \" |7 G& D( p, N
- <span>选择的值为: {{ checkedNames }}</span>
, y5 r g) o; B {4 o - </div>6 Z+ o7 {, o; r5 i4 B9 w
- # |2 K. b7 u$ y+ I3 W+ C# ~
- <script>0 t5 U5 E/ n9 I2 [" K3 V% S4 a
- new Vue({
3 B8 ]5 r/ k, B0 I' [9 I) ] - el: '#app',
0 Y: t. H! C8 M0 l6 y& i9 C - data: {% T+ i& W- I3 h1 n" H
- checked : false,
7 _3 |# W" i& G" b - checkedNames: []2 L: B+ v8 X! V+ G' J
- }
8 x% I7 ^$ L8 F) q1 R/ ^ - })
$ F% k |- L7 b6 \8 N - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮; T2 k0 E) N H: |
- <div id="app">4 F! D. U* s5 q1 P9 M9 O* s
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
% {) h: l& `3 \9 Z; q D: o - <label for="runoob">Runoob</label>2 W8 E/ Z8 C& z6 _8 h1 J
- <br>2 A, S& O$ J5 g
- <input type="radio" id="google" value="Google" v-model="picked">2 h- u( w' {2 R8 U( b; S4 S
- <label for="google">Google</label>
" q+ V) ^" \5 ]; @& _ - <br>$ G9 \8 o1 V; v* s+ \- R6 s
- <span>选中值为: {{ picked }}</span>
) z; `3 G& X5 q - </div>9 a! X$ T- C8 Q) |* T
-
7 ]$ U) b4 t: E - <script>
; j3 X: p" ^3 G5 z! z+ A - new Vue({5 z( W3 l d$ [' I5 ]; Y
- el: '#app'," E% k6 f7 W- \4 B4 S; D6 d5 B% j
- data: {
7 `) [4 t* g2 z - picked : 'Runoob'
3 K: o' _- Z& ?9 N - }
! s9 R+ Y8 u7 t" T- Y. J - })$ f( e$ d# a0 o! [: q
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
: ]: V7 ~; N( p1 b1 E0 K- <div id="app">+ ~4 h2 K+ T' t# g
- <select v-model="selected" name="fruit">6 P; r6 V; o# w0 Y* C- O5 g
- <option value="">选择一个网站</option>
. [2 C! J7 S9 J. M! ?8 ? - <option value="www.runoob.com">Runoob</option>8 k+ C* p7 L# [1 x
- <option value="www.google.com">Google</option>
& [2 ]& P; ]! l+ t" C - </select>) I2 }1 v* X H. I# X8 ?
-
# i" ?# e& Q$ `7 N - <div id="output">* u+ A- O( J* M; V% ^$ }
- 选择的网站是: {{selected}}6 \0 ~5 m4 C4 o) F& l h" Q" q+ X
- </div>, Q5 V' Z2 t7 [: r3 j
- </div>- Z" U. n' }! B, ~ l4 P
- / G: |9 w( O6 c, ~# o, C9 O, ~+ K
- <script>
# r: [ H4 c9 d1 T( L: M9 w. h - new Vue({7 b: W4 ]0 e; y: _
- el: '#app', V+ y# r# j/ N
- data: {
0 a4 o6 B- k s# }- v" q - selected: ''
8 R& w: Q( M4 f+ ?9 n! R - }/ D0 i# X$ [: k+ S
- })1 ?% C2 T) A @8 a! g# s& y
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->/ H7 ?# J8 K' s9 t
- <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 B+ p& @. y$ M; y, p - el: '#app',
6 {2 u2 `' @1 ]) C/ D3 _ - data: {4 B3 q9 @9 N0 F8 E# ~. o4 P
- checked: false,
) h/ e4 k- U" h - checkedNames: [],
5 K. g: ]) d) [4 q - checkedArr: ["Runoob", "Taobao", "Google"]
+ K [8 T2 }* q U y! K$ P - },
$ O5 |# U) |7 _4 u% G h. \ - methods: {
: a0 ^! E! V2 @. } - changeAllChecked: function() {* n# y# R, x* Z, r
- if (this.checked) {2 k3 F6 r+ U! _ ?
- this.checkedNames = this.checkedArr
. Q' l d& N+ Q, x4 }; e: w - } else {
5 x6 Z2 I2 R- ^; b4 M3 p - this.checkedNames = []% c# n M$ E2 K
- }1 h" r% \! \# f2 G# @4 D
- } m2 G* I' G4 K. P. Y0 d* F
- },
0 N! U. t( Q2 j7 c' j/ z7 M - watch: {9 L5 K4 F# ^6 w) Q
- "checkedNames": function() {) [7 u. H! n k( s! o
- if (this.checkedNames.length == this.checkedArr.length) {
7 L& i9 R' e+ g - this.checked = true
- N( V x0 }6 \0 E) s* Z# X+ D1 l - } else {+ Y# R l, B0 |* W* d' Q5 ^
- this.checked = false1 M' @* I, T. w3 M9 j4 i
- }; `# w4 ~- A/ }+ N4 ~
- }
& k1 {' f) }8 H& ?5 [! [+ Q% _ - }* A; j" v; x; _4 v* _! c
- })
复制代码
3 z& ?3 \" l' M* U! b0 X9 O: u1 {" l" X5 [& ~, v W9 g! P
1 W: C: Y4 j5 Q) R
) a' `8 q' W; Z% i- [5 `0 K; w
3 q+ I/ B8 q X; M( ` b0 R/ l5 v2 ^/ J4 Q; p
( `* Q% u8 I, M8 `; i; G: L! p( ]- ^5 d& D( E1 A4 b
|