|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: , \! E* o4 C7 }6 ]& m
- <div id="app">
5 Y5 r% o* j9 L" E, v4 K% g - <p>input 元素:</p>
& c+ D! m' X9 L' D( r - <input v-model="message" placeholder="编辑我……">
+ N! L; Z' ]8 x% O. g - <p>消息是: {{ message }}</p>' Y9 m8 R# t$ Q+ h7 g
-
- P; [" N, g: @4 r O+ Y6 r - <p>textarea 元素:</p>: a2 U& c( h% H, m/ @* C% Y& z4 l
- <p style="white-space: pre">{{ message2 }}</p>
; R Q: @4 o7 ~! A* A+ p9 c6 C) ^ - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>7 n% j- ?& w# b b6 F
- </div>2 r* e4 M6 b; a+ k
-
/ o& G4 [2 \. I8 v - <script>
1 Y% R H; c. x8 }) v, J( M, B - new Vue({
4 R/ q, _$ N* c/ @* X# I - el: '#app',
7 v# ~; P* ~" z, T" ]" O - data: {$ d( ]8 ~: h1 \0 g) r: {
- message: 'Runoob',
$ F u6 f) D6 U# @ - message2: '菜鸟教程\r\nhttp://www.runoob.com'
3 f& M: q$ i" @ - }
5 t% P8 b1 z* I; T, {! e: N - }) F9 n' y) c& ^- _6 e
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
" t. i/ a7 k% }. m5 ^) A- <div id="app">2 u9 g) X" J8 ^2 v# U! Z+ t7 `6 W
- <p>单个复选框:</p>+ w/ J8 E) d; i- l' ?) Q! d
- <input type="checkbox" id="checkbox" v-model="checked">
; v7 ~! e$ M5 @2 c - <label for="checkbox">{{ checked }}</label>( o8 X" P' I' A, E: k
- O5 P5 _2 p" ^- x r3 R9 J+ \4 K
- <p>多个复选框:</p>* d8 ]1 R- G8 @: c0 \
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
4 ]1 K; @8 |& W9 V" ` - <label for="runoob">Runoob</label>: J N! n1 e# n; O
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
6 G1 x8 U; T2 [3 a* p - <label for="google">Google</label>
7 @0 H3 H$ }" ~& |$ ] - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
0 O+ U% `! M K, m" H9 I - <label for="taobao">taobao</label>2 t" Q: r! [# `9 H
- <br>
7 T# I. X' ~. M1 B ~0 L- s3 K8 U - <span>选择的值为: {{ checkedNames }}</span>- `/ Y+ C: x7 z
- </div>) b: _8 U- P' D6 E# s
- 3 U0 v. i0 q) R: K8 ]% w
- <script>
+ [7 |) k5 d: q4 I3 q! ? - new Vue({: V( P7 t5 L4 t7 o" z; {
- el: '#app',2 K5 U$ @$ \' `+ v9 u$ m
- data: {
# ]. p# x: f! ? - checked : false,
" Q6 t& f- _& _1 P" {! E# e1 c - checkedNames: []
9 n- |0 M1 O# M6 M- N" a8 {+ U - }
% `& E1 ]5 Z P+ I& t) F: N - })
; \" C9 s3 Y* c* m/ p - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
( ?/ K2 r$ _# q; l- <div id="app">
$ a A6 j- R6 C+ y - <input type="radio" id="runoob" value="Runoob" v-model="picked">0 b! w' ~, F# P! g
- <label for="runoob">Runoob</label>& A5 L# r0 x' q$ i
- <br>
; j- V- k# y/ ?" d3 k- V - <input type="radio" id="google" value="Google" v-model="picked">. w$ d0 p, l# }- @, L% n2 O
- <label for="google">Google</label>
$ a$ x8 U( H, v5 [ ` - <br># n* W0 K ?" V" T2 D8 U
- <span>选中值为: {{ picked }}</span>( |5 Y$ t9 B) \8 x0 R. D
- </div>, D8 d/ n- V9 U2 k5 b+ {5 D2 @
- $ ?/ H4 ~7 i+ j9 X* x
- <script>/ m( X0 x+ C3 O! Q( p5 N2 E6 Y2 z
- new Vue({% R H6 r9 A( y9 Q0 F% Y1 q6 @# U
- el: '#app',
; a: V# N" o% j( r. a - data: {8 F5 t$ }$ n5 C6 s6 l4 U
- picked : 'Runoob'
- t! H$ G! S7 n5 w5 y3 B - }
4 P I5 W6 ~1 T$ W) r4 I# ~% S8 r - })" E* T3 I5 |; E2 c* x. p
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select7 E! c- z' h% p: Q, ^
- <div id="app">
g) Q; l- O9 x6 R F0 _- Z - <select v-model="selected" name="fruit">
, s' k% j6 Y0 \/ C- q8 L, E* \ - <option value="">选择一个网站</option>
# q4 x9 X3 M/ N. p5 ` - <option value="www.runoob.com">Runoob</option># t1 X' G9 f1 l
- <option value="www.google.com">Google</option>
m# j+ H/ B0 M1 A* Q- G1 ~4 [% { - </select>0 ^6 U2 _# z" { R
-
/ C5 v$ E; h9 r9 k, R C - <div id="output">$ _, A3 q: u3 \
- 选择的网站是: {{selected}}8 v+ L! ~* i# g
- </div>
1 ^9 d: s/ O& z- z) b& f& _ - </div>
) ?6 \: k, T5 P) t! I -
4 u) ?$ g: f3 L - <script>- T. D& R* G5 j" L; a
- new Vue({
0 @! f, n& @: Y: E/ i, u2 F( N0 Q) p - el: '#app',
7 v# y, D3 ]' g1 q. t2 z - data: {
. L; x/ q* l) h' m9 V) _$ W- ~) M - selected: '' ; w! W1 z" u) ]* S% H
- }3 Z* @; e3 b" c, Q0 L* e1 e( x+ L
- })
# x+ ]! x- I0 o" A, H& z* _% | - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
! d' M; k+ F5 q9 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({( g) e" \2 E" d
- el: '#app',
5 t; O- w) F8 f2 A$ x - data: {7 r0 |7 R: H9 u1 h5 U# o3 e4 f& ?
- checked: false,
0 b* s X( o" d) n3 s/ R" K - checkedNames: [],8 }4 E: _+ t, T; u ?( W
- checkedArr: ["Runoob", "Taobao", "Google"]
0 @, o9 b6 N! ` - },# f- _# r- P- U' L. T: {
- methods: {
1 r& b8 V: h) t5 i+ k$ S% a+ g- a - changeAllChecked: function() {2 H% D& B# p, g0 a" L
- if (this.checked) {
/ B& j' M* N2 B/ ^ W* q - this.checkedNames = this.checkedArr
7 ?0 h+ ^0 Q$ _: e - } else {
( \0 o3 Y1 ~1 Y- n1 G - this.checkedNames = []
& U v9 r9 `1 X2 n - }4 X0 I' v- c% ]5 S4 D4 x2 h
- }9 l9 C5 k* x7 Q3 t
- },; t8 O& I5 U3 d6 s) V# P
- watch: {
' w# n0 P" g4 X T2 ^ - "checkedNames": function() {+ U: y# t8 r* i& z5 z7 q
- if (this.checkedNames.length == this.checkedArr.length) {
8 l/ K9 Z5 }9 i' K: {1 G1 U0 C - this.checked = true
, L0 X* e2 z1 E' _ - } else {& K6 |9 ]# u+ |3 c5 X4 }* [7 e
- this.checked = false
8 R r- n+ b, H - }' ^) o* d* e8 A( D: g
- }
9 t+ B( b. s x2 [/ C - } C% q l5 b: e, D' @' V! y6 P
- })
复制代码 5 r* B& n# S) O- Z) k! s/ R
7 l+ l* f4 j: T8 U, I+ y# |
! M& K" r4 Z3 Z) B1 Q
8 Y& E) b7 G' U5 F8 Q) R' ^, I6 K( O9 U& ?% y: F* E6 u
; U5 f- J& P. V8 |% I! r. q% T7 L) Q7 j9 K; }7 L, D$ J( D
% z2 [/ r$ a3 }1 v% w" D
|