|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
. v9 o3 K3 Q% A2 a* n+ n- <div id="app">3 b- c0 R6 h' D5 Q4 r
- <p>input 元素:</p>0 w' Y0 h; _+ l: O8 \5 t
- <input v-model="message" placeholder="编辑我……">; h( \3 r) w2 ~% j* y" t
- <p>消息是: {{ message }}</p>
6 l' n6 G9 M- Z- X: W - 3 z8 h$ _$ X" ^. L+ d1 f. o
- <p>textarea 元素:</p>. j$ m$ ]% S$ P! ^
- <p style="white-space: pre">{{ message2 }}</p>
& N7 ?. _, ^2 g1 F' b: } - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>0 q8 [/ R: S5 i- s) L
- </div>
X- w5 W8 J7 z7 J -
' n( t1 y6 i/ o: ~# F# _, y0 m: ` - <script>( I: a3 v3 i+ w z$ M' P, ~
- new Vue({
1 w2 S. s2 W/ ^ - el: '#app',
( t* r. C! i0 ?9 o) ~$ | - data: {
5 C* E5 R9 X+ i' [; z G* B - message: 'Runoob',
% ^! m7 A+ X- F - message2: '菜鸟教程\r\nhttp://www.runoob.com'
( v- t1 L# z" d+ ~# M - }. N( o9 j8 H! ~% b' T1 O
- })# H; K: h% q+ M8 b. v3 b/ E
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 1 o5 m, G7 O+ I5 J2 N; v$ o+ q9 m
- <div id="app">
- R9 `! I. ^% r6 y9 F - <p>单个复选框:</p>
, A, }; V! _ o/ C; f - <input type="checkbox" id="checkbox" v-model="checked">& j3 P$ W3 h4 n3 O4 N5 c# \# p
- <label for="checkbox">{{ checked }}</label>
" o) s. t$ D- G( e -
4 @0 P; i' [/ [$ H - <p>多个复选框:</p>0 `1 {/ X( R% }. M6 R
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
6 d3 x2 `: E3 ?+ e6 w/ O d - <label for="runoob">Runoob</label>
/ L: o. j8 }. m7 r - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
% a6 R) B! e4 m. i2 p, w& t - <label for="google">Google</label>6 \4 m5 J) H, L# _
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">( t ~1 ?1 D I) L. s( P; W
- <label for="taobao">taobao</label>4 S: K3 W) R5 ^5 w4 D# K
- <br>
! j" V9 i0 X1 j, d6 `2 U* o: n - <span>选择的值为: {{ checkedNames }}</span>
. A( }8 s0 i8 O5 k - </div>- V% R8 W$ l' M# T
- ' s \0 v& u2 Q) x9 Q1 j
- <script>
* N; R7 E- |3 m& p9 I6 @3 Q* P. R - new Vue({
( Q6 m' d0 h( W' ]( ]0 ~ - el: '#app',
# L& N& ?" U' c. z - data: {2 Z; j; D2 V* I# r9 {
- checked : false,
- ?2 O/ M+ P8 P- F1 v' V2 i - checkedNames: []% q0 p, }) i9 |4 h
- }
/ x# F" |) G& |' S& K - })
4 `/ d1 Y2 u3 X2 U; N - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
* S7 t9 ?. x, Y2 q8 S9 ]: S9 T- <div id="app">/ j/ p+ u6 V2 N7 I3 S* S) V, ^; C
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
- W3 r* a a# X! q* L( f. l - <label for="runoob">Runoob</label>, g8 v$ W9 S c% g0 Y4 v! T. U
- <br>
7 x5 v# Y7 v6 g* R2 M4 t - <input type="radio" id="google" value="Google" v-model="picked">8 W1 H7 W) U2 @; \0 {5 X2 T% S& e
- <label for="google">Google</label># {- \5 _; l4 T4 g5 ^' g& ?
- <br>" x* i; m% Z! D. [3 _4 t
- <span>选中值为: {{ picked }}</span>0 f0 ?% ]* O% U) l5 k: G `' _, t
- </div>
/ d) k% L9 ~1 c( Z$ T5 O; \, G - 7 L5 A, Q4 M6 H F+ v' z' p6 h
- <script>, X0 G6 R& j. W9 x) ?
- new Vue({
6 q7 Z+ `! t1 C) r- { - el: '#app',
6 z L# e6 ?* f+ M& @5 K8 G - data: {
8 c1 \7 e: m5 q% I* g - picked : 'Runoob'- \5 _. O# I, h$ l6 S. n1 f5 z1 e+ B
- }3 r3 ?; Z4 X9 r: r; F6 A
- })& c' `# s- A& ^8 U% p
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select& g8 N9 s# k" A2 T) J. l# z! m0 ]
- <div id="app">' q- _' S# w6 I( J8 j+ G0 C6 X
- <select v-model="selected" name="fruit">
7 N! F. v% V+ V1 K4 x - <option value="">选择一个网站</option>) a+ P$ i+ D5 M* j4 e4 ?) ~
- <option value="www.runoob.com">Runoob</option>
' `4 q1 t3 S" S. W( d) q; T6 P - <option value="www.google.com">Google</option>. |$ O% X; D( l
- </select>; w$ \! V* s! ^& \: m4 @* J2 Z
-
$ `% t2 S& P ?3 E8 X8 x - <div id="output">
5 M1 ~- d. D# v; [, B3 g* N2 m5 r w - 选择的网站是: {{selected}}
9 i' w; k* ?- O. m) `9 ^ - </div>/ u8 A$ v T! S+ W
- </div>6 r) t [7 X$ k$ U7 s, X6 d, s
-
* c6 v. A. l0 I' v - <script>
! b t* U8 P2 V9 F# A0 b7 ~! I3 ^ - new Vue({
: |( n- l3 Y& _0 \% B1 R - el: '#app',6 H( ]9 c+ Z- ^0 O* {7 c; V9 z
- data: { B" P! ?, v* w: c
- selected: ''
7 M- {" @) \8 n4 m y" Y7 A/ [ - }; j2 w9 C4 v3 r; R
- })
, J3 ]5 W8 d2 ^( b. x - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
5 a- z; h5 m% V3 @9 v) x - <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({
. K' Q. v: K. C - el: '#app',4 c- e: o6 j1 p' G" A' Q
- data: {' X$ t) J/ G0 s& @! N. V
- checked: false,
/ p9 D6 k% R( S* @& m' `3 O% N( { - checkedNames: [],0 c% E3 {: X( C' s& D
- checkedArr: ["Runoob", "Taobao", "Google"]/ d# _' x/ r) `$ Q) V
- },
9 G2 K5 H+ {0 L1 b! _ - methods: {
& E2 o3 V$ ^" Z+ b; Y - changeAllChecked: function() {
3 L% k- _" y: l" i, ? - if (this.checked) {
, X) H$ }) s, C" t0 v - this.checkedNames = this.checkedArr
' l% a# L/ c B6 O- w8 t1 _ q1 Q8 B - } else { s2 N" i4 x5 M7 j9 ]6 w' f
- this.checkedNames = []
6 Y" f S# N% s* N) Q3 M: G! }6 R1 V - }
- p! N$ P9 C, h; a# r - } ^% Q) D/ R! }
- },
# K1 G# |% z: U% U4 C& T" O# t2 u. K - watch: {
' Y1 X, B( ?3 ?& W2 B$ @ - "checkedNames": function() {: D+ j# O1 I; Y2 M5 A2 E' |
- if (this.checkedNames.length == this.checkedArr.length) {9 {& N( L# w( ]2 F, B
- this.checked = true8 h7 _+ y* O+ L
- } else {
2 h* y( S2 x- g% d! S - this.checked = false
3 @: Q6 s' V5 y8 _2 h- Q; E - }
- d, d( ~6 }$ v1 J1 x. S% L4 t$ U - }: Y O9 F7 j: M" L% k
- }! D+ B! B- n e0 @
- })
复制代码
8 \& Y; M9 Z2 L x7 j. s- A! l" `, R3 @: E
" Q# l7 I) Z Z' T
7 M, p2 }/ c4 k; U8 i$ e4 s6 b _1 K& E: `0 j) {' { s
% {( h3 y* h% ~& z
# j+ L" `* K* i, h/ o
, i: f1 X" ^0 N) Y A8 }
|