这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 5 E6 F t2 H; z$ s; ]
- <div id="app">9 x& z8 D3 T* C- f$ V, x% P
- <p>input 元素:</p>
5 H0 m- s k- Y# C+ b' s - <input v-model="message" placeholder="编辑我……">
, t: w2 A* S. n- c; p - <p>消息是: {{ message }}</p>, U4 j& o: u7 B" J8 R j Q
- 0 S/ W6 v7 N. N- w2 i9 Q' @
- <p>textarea 元素:</p>0 t- S- G1 a5 E$ ~0 X
- <p style="white-space: pre">{{ message2 }}</p># ~3 L% u) Q' o' H
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea> Y! c+ B& T; ]. M. {& Y3 c# z
- </div>" Z% O. g. M8 D, b0 l
-
6 Q6 P8 [$ h$ p- ? - <script>
7 T5 Q* I: U( L - new Vue({9 z. t: z$ F" u
- el: '#app',% c0 h/ k* j9 f' b
- data: {) \0 Z& W4 E5 W. l6 I4 b
- message: 'Runoob',
e4 `2 e- G0 S: h5 Q' M3 @1 l - message2: '菜鸟教程\r\nhttp://www.runoob.com'
8 {) H( o6 F6 _! |6 \& o - }
[+ n- Z$ L) ~5 Z: ]7 L2 y F' ? - })2 s8 U9 t2 j* J) d
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 0 E: J$ H G( N" W2 G' ^* P) }
- <div id="app">1 I, O& U' {& \8 _& D( V
- <p>单个复选框:</p>
& e4 w3 W) O" i! B0 B( u' m0 V - <input type="checkbox" id="checkbox" v-model="checked">
! p4 @" W3 b( `( f6 D N5 j - <label for="checkbox">{{ checked }}</label>$ \* s! \2 ]; T7 L9 M) d( T
- ) G" }6 _4 p6 X8 A3 u) W |1 U" J3 o
- <p>多个复选框:</p>3 j% w# H% Q; n& j3 A q* O
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
9 N2 W8 V7 K4 h8 h - <label for="runoob">Runoob</label>
) |. k/ Q1 E2 z - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
9 a5 D: ?( L! @: V4 {. X - <label for="google">Google</label>
5 s$ F6 Y7 H+ l - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">2 \# W( i, _3 U2 M
- <label for="taobao">taobao</label>
2 P2 a, t- @4 K& L' z - <br>
" X7 _, u# Q% ?! h% G% ` - <span>选择的值为: {{ checkedNames }}</span>4 L$ l- v( ~: `7 q) _5 x6 t
- </div>
1 H8 _& x& [1 `/ v9 ?0 L6 t -
6 L, E# [3 b% \" b- R+ M3 y - <script>
7 E, t) n, P: j - new Vue({ x4 H7 c9 X! S& Y* S; O% M
- el: '#app',, W7 H3 Z( P y" T% X: q" n, M
- data: {
: P0 P; p% C$ b7 Y2 l5 ~ - checked : false,
, j1 n b/ M( p0 n - checkedNames: []' u* s% O3 {' x- L' H
- }
+ R+ r- O$ {" B2 o1 t) {; Y - })
. n3 {6 H9 E* x2 A/ t2 z - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
$ { F8 I& D* h* M' A- <div id="app">) E: z$ L7 O& B9 y- v
- <input type="radio" id="runoob" value="Runoob" v-model="picked">0 ~3 z5 f$ s' k
- <label for="runoob">Runoob</label>- Q1 `# n2 N: D7 |/ V
- <br>4 k$ _' m T9 ?2 A( s
- <input type="radio" id="google" value="Google" v-model="picked"> D/ _) R5 ?+ B/ Y3 z
- <label for="google">Google</label>
7 N5 t. k. \$ w4 Q; @. g - <br>
5 ~+ u( c7 i9 ~- y+ `. i& [! d7 u- k - <span>选中值为: {{ picked }}</span>
+ g$ n' W; {; I, Z - </div>* |2 x$ a; ^7 s+ _
-
7 ^; ^( [' t! @2 D# s6 `( ^ - <script>
9 T* a! L+ [) ~7 @; f* j - new Vue({
* `1 V* ~7 @- r8 |" v M9 J - el: '#app',
) r9 r& e4 p% U3 q8 E1 p - data: {6 o$ N5 z1 F3 P& B
- picked : 'Runoob'
0 T7 b: N* K0 J$ t- W. j - }5 U4 ?( C. m+ ~
- })
9 j/ O# \+ j5 j$ a - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select! @1 s* _$ \% o& P! n
- <div id="app">6 b; h8 x2 }8 P. `9 W6 @
- <select v-model="selected" name="fruit">7 k) X8 C0 y9 \2 i
- <option value="">选择一个网站</option>
3 d8 q9 a, O# o0 ~2 O2 H - <option value="www.runoob.com">Runoob</option>& n$ e& d4 C( c
- <option value="www.google.com">Google</option>9 \! [, }8 o: C% }% A# C
- </select>, a; D4 h/ I2 q
- , f+ D6 G+ H7 S3 c/ m: u l/ D* k# \
- <div id="output">' Q% R3 V" |4 O3 |+ q) o1 e
- 选择的网站是: {{selected}}# X; C! H( G$ x3 O' z9 l+ {
- </div>
0 v& P, r. y) Y7 [' g. b - </div>( l9 z. {+ _3 v. Z4 \8 Y; U
-
9 k6 B h' G+ Z9 C2 _1 Z - <script>
- ~! x! ^6 ]8 H- ~3 i, W4 b - new Vue({
- |' i+ [7 ]6 J9 Q+ g - el: '#app',
2 u' I" n8 v5 @( R' e# c - data: {
5 B0 Q! G! g! J1 z. M - selected: '' + Z: g" Y& \; k
- }) c$ m' T# d4 \) J
- })1 n# E7 |& N& W" D |& W
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->, v5 T4 j) {, B j9 ?7 M/ _
- <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({7 q$ e! Q) Z; y( J+ d
- el: '#app',
* h- X3 q/ @) ?- D/ J! N% U - data: {
2 ~; L t5 |, s1 ^ - checked: false,
. d S; f, e9 S% Q- p - checkedNames: [],
B. W+ L+ V; K9 c - checkedArr: ["Runoob", "Taobao", "Google"]4 O+ k8 f6 A5 E0 @# {# B d3 J2 Y
- },& r( b5 }# A7 y2 O- G
- methods: {
( u6 I3 N- j# S, q - changeAllChecked: function() { ~, o, c9 g6 T
- if (this.checked) {
! c! F/ j7 ~. z, | - this.checkedNames = this.checkedArr7 H: T# a9 l- p* V7 }* ]8 u
- } else {
" D4 s3 ], W+ W9 n - this.checkedNames = []
/ D. J+ }( W, D) L - }" L5 {- j5 G% i# Y% E" g
- }
" C" |, i. \* V4 t - },8 ] g% q/ p; S; d1 E1 o
- watch: {! x3 ]& m) N: A" C. V
- "checkedNames": function() {
9 e" f& G( j B - if (this.checkedNames.length == this.checkedArr.length) {
N! J0 S( z' `0 L' V - this.checked = true8 v! h2 L+ F( U) U9 v1 J! j
- } else {8 {' }9 j$ M/ j% U4 ]
- this.checked = false
2 t; r) T2 {, Y - }
: g% g$ r8 B9 v& } - }
& o. D+ V$ _" M" v& i% P& L - }+ W3 f( b9 r7 C) ^
- })
复制代码 % c7 }. V! B) a/ `4 g; Z
7 j! d# m6 ]2 a+ J! d) F) t
, I! X O( H: u, L, }5 i4 E
# \2 S/ {2 `1 e( G
# F- g* |- u$ v4 B- h) Y# E
4 w6 H; J8 R& n! }( z9 O. R2 T' e
+ t$ _2 s& W: M% ^1 I8 a- I
$ z) v$ \/ i. J, O) B/ z* S0 u d1 @/ D
|