|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
5 j! F7 U& ]' c G. L8 T1 W- <div id="app">
/ @' M! ^4 J: S5 D - <p>input 元素:</p>- R! O' |; }7 [* w4 A
- <input v-model="message" placeholder="编辑我……">
, e% A- ^. u5 P3 F3 }/ F - <p>消息是: {{ message }}</p>+ v' k% E9 i9 v3 [. [
-
9 q% U9 }" s( y* W - <p>textarea 元素:</p>
+ i! D. s' Y" h - <p style="white-space: pre">{{ message2 }}</p>7 V8 y `. h5 A2 L' c
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>5 Y; X Q- M+ `. O% m
- </div>
# R9 l$ y& j& v- a+ A. p - 6 h3 ~ x! Q, M2 Y `: `
- <script>8 `$ h- X6 i: U$ r
- new Vue({; j" H! E+ f4 U. F
- el: '#app',
) D3 w% |) d4 o. w - data: {2 m8 F+ y! C* s+ G1 J
- message: 'Runoob',2 J4 u' A6 ]' l! b+ o
- message2: '菜鸟教程\r\nhttp://www.runoob.com'% R0 A1 m8 L/ }( A; E% A {( D
- }
( I. }. Z3 C. I- M$ O9 U* L, X - })
! x: P$ j, O' Z* s$ D8 x. a/ |" r2 w - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: / B1 b( ?( g! p7 _9 ~
- <div id="app">: w) R3 G; b- C1 l% Z2 Y0 T
- <p>单个复选框:</p>
6 i6 w4 y! P0 C - <input type="checkbox" id="checkbox" v-model="checked">8 x b. x: A! m r
- <label for="checkbox">{{ checked }}</label>
, P: @1 u, j0 w' d1 K# _ - 6 v$ E. f; L0 }6 F1 d! R, ?
- <p>多个复选框:</p>. j# E7 q; |! w; y' X( l: N
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
. j) p) k% Q! d! p0 n - <label for="runoob">Runoob</label>
& I' O* T* ]* j; x6 y - <input type="checkbox" id="google" value="Google" v-model="checkedNames">, Q* s& O) A7 C! }
- <label for="google">Google</label>1 l# F+ A; U* H+ ]9 F0 `
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">/ ]# C" k, p ?1 [7 q
- <label for="taobao">taobao</label>, y( N8 Q# {) m+ w0 N- T* f
- <br>( f0 b; I, a' G. y, k
- <span>选择的值为: {{ checkedNames }}</span>; i# I& S% H5 m/ ^. t$ }1 d
- </div>) e+ I/ g) `3 O6 `, x1 Q2 D' |
-
7 F e; W# F# E, L0 m* a: V2 U" I - <script>8 ` v: n8 M+ O6 L" q+ A
- new Vue({8 [* O' e$ B( O" v6 `! \/ d4 x: M
- el: '#app',5 R2 u/ r9 q9 I: A& W
- data: {" _$ _1 Y) N/ x) S4 t: B# U
- checked : false,
# T8 Y1 \4 H, Y6 a/ ] - checkedNames: []
' @2 u0 k$ s. g% R - }
M' Q, ^3 M8 Y4 o5 u7 { - })
. d" M5 g6 K+ V6 t2 m - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮, |) J" v. D. `1 l& e" M
- <div id="app">
4 d# f1 t1 y& z4 e - <input type="radio" id="runoob" value="Runoob" v-model="picked">
7 B* V/ `- F1 }4 y4 h3 i - <label for="runoob">Runoob</label>$ Y# q, A, J& t2 B. M
- <br>* m3 `- |1 E: l" S. x/ K
- <input type="radio" id="google" value="Google" v-model="picked">! [' }; l' @& @% t* I0 ]/ I) R
- <label for="google">Google</label>
! m7 P4 I1 _% l! j1 @ - <br>
/ {6 e: J7 b( \2 E0 ]# c& Z9 u - <span>选中值为: {{ picked }}</span>
4 M0 R/ Z* k, f: @& e - </div>& p' e3 B/ K, ?( q) Y( a9 c
-
- v8 n# J0 O! G - <script>
, C& y& j& j) f# w* I1 N& \ - new Vue({
6 ^& v: o* x/ D- X5 @ - el: '#app',, N9 D- D3 f! v3 _5 E% v3 z9 ~1 U
- data: {
! c8 b Z: K8 Q+ }+ T( G - picked : 'Runoob'- n; _+ N" l: w$ a3 P& h
- }2 V" D" ]+ I" I5 g
- })
) ~" ]: @4 H4 q4 j& O2 z4 x - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select2 v6 D( r$ ^4 N7 u( F& x
- <div id="app">
( k! _% i' u' C/ ]# _" |1 ]/ E - <select v-model="selected" name="fruit">
: @- s& x+ M) K4 I) k - <option value="">选择一个网站</option>* E. h( V0 g8 q
- <option value="www.runoob.com">Runoob</option>0 f) E% Q# S) e B+ c" T
- <option value="www.google.com">Google</option>! G3 B: p+ \0 j/ I8 K z. v7 a2 h
- </select>
W/ F$ s4 ?7 ?) _# q: q -
) D5 w9 y- |+ R8 f* \( J) } - <div id="output">
" V. V+ d2 h. r- P0 Q; k - 选择的网站是: {{selected}}! V- H% k+ D" N' A
- </div>
5 Q0 e: |9 L# y# Q, O p6 K: w - </div>5 p3 y9 ]7 v1 U6 e& _( W% ?
-
- Z8 o& r- I. e5 V- R1 I - <script>
0 o! y2 H+ o/ i1 c! E - new Vue({" q+ Q T+ h0 _2 }( g( O0 @
- el: '#app',, e6 l1 D" B5 f H! _+ p$ C
- data: {* n0 c: s4 u. }6 l& D0 Y N
- selected: ''
: m, q4 @7 P9 b3 | - }
; x/ |4 a h7 e. y1 l8 b2 u$ q - })
. \ X R6 L) r" q* j7 \+ Y* Q - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->) Q, o5 O& t; B8 ^ i) R2 q
- <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({
( @, a3 {- }8 W! V/ w - el: '#app'," I+ g$ f" K- f
- data: {1 y- g- ?8 b$ k2 a% l! q0 w; S
- checked: false,
. d& {# ~) D# N7 j0 a8 ?# T- w! _' e: K - checkedNames: [],8 i& H9 V" i5 ?- O4 Y
- checkedArr: ["Runoob", "Taobao", "Google"]5 b4 t9 D e& {
- },6 @& B l t/ p' j$ |4 J Z
- methods: {. s% R' \2 j6 s* E" d, x
- changeAllChecked: function() {' U$ F {) b7 b+ a% t7 U
- if (this.checked) {
8 @5 e2 M' N0 C0 A4 O8 d - this.checkedNames = this.checkedArr
" e) c( h+ Q# `# y O# ? - } else {
R X( y/ {: A) t& S5 l; U: O - this.checkedNames = []1 `6 s9 I6 y, p' ~. J
- }
6 Z$ |% z1 d ~5 }7 L- e) O( ^( h( f0 ? - }) k; `% p. c: J7 n; G6 H
- },' c( }& o( M) I) P
- watch: {
, E/ Z5 [: C5 c- I* z4 a - "checkedNames": function() {
# R1 t6 u* y1 |0 w& h- J1 C; v - if (this.checkedNames.length == this.checkedArr.length) {
! h- k0 F, H9 E - this.checked = true( o* P9 P4 e5 Z! v! W
- } else {
9 J3 A5 a, X) ]- J' k1 b, { - this.checked = false
+ r: l- [. q. V0 ~- t H# M! e, t - }3 U( J ]$ |8 D& \
- }
% W- |+ u. Y$ `! l G% ~+ k( U& F - }- V+ b: u7 z8 I/ r- l4 Y
- })
复制代码 0 i) f6 v H8 L3 _) X2 w
7 x' ]9 E: `1 r, u, u# S
9 h& Y" u8 H1 r3 ]/ a5 {0 h- j- g+ O b6 o4 h
4 y. I! U W9 p$ t3 L+ }) Y+ O
9 O" c7 c+ H+ X- @1 F# X; v s) a7 a" z( `
0 u) N4 Y3 g, a \4 @, o1 k/ w
|