|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: : J& M0 p# Z% H* n' {
- <div id="app">5 Y! `9 Q' m2 W7 b" O F) \3 d
- <p>input 元素:</p>/ ^' q) r% L* d
- <input v-model="message" placeholder="编辑我……">$ { }7 x/ V5 N' u7 n; p" U6 [$ V
- <p>消息是: {{ message }}</p>
( i# Z/ x7 E5 |0 E0 F -
. y1 L' ^. g* B4 `# ^ - <p>textarea 元素:</p>* I( f2 L2 a+ k
- <p style="white-space: pre">{{ message2 }}</p>
9 ?4 y. z; g3 z; d$ p; r - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
5 W/ c1 I4 v8 ?& j: u0 H - </div>
" S/ @1 P6 y) U- ?2 [3 L - 7 v% M) n3 J# j6 h7 x# d I8 y
- <script>8 m' i* }' r# c! ^, L
- new Vue({: i) V. D3 n! v5 S* `% J
- el: '#app',, z; U8 ~3 g2 e% a4 i5 D+ c- T% m
- data: {
% V' n% _! r3 R$ B- l4 @ - message: 'Runoob',
' w. i: N" I9 L - message2: '菜鸟教程\r\nhttp://www.runoob.com'' ^2 \& p8 v t4 g$ |2 h
- }$ p/ t( ?, T3 g d' J
- })( g- `$ b9 U( a4 b; s
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
7 h! ], Q0 f y" `) d- <div id="app">5 f6 g6 Z( `, H; F' }- R- s
- <p>单个复选框:</p>
: c5 t5 y* g/ m2 V - <input type="checkbox" id="checkbox" v-model="checked">
8 j' ]3 Y7 [" x9 ~1 A - <label for="checkbox">{{ checked }}</label>
, D/ {2 _4 T4 i -
, N R2 U* e( \6 k. k3 H; t& g - <p>多个复选框:</p>
; F% {5 @* ?; c( c - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">: [! V& R) R* O' D4 K
- <label for="runoob">Runoob</label>1 r: `$ u' U; U$ [
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
3 I; r- L& w8 x6 @/ y& { - <label for="google">Google</label>
* J7 d; Y$ t0 c$ J" q5 C } - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">, x: D; i2 e, O8 A/ Y0 h
- <label for="taobao">taobao</label>9 d* H: q* n3 O1 \8 N
- <br>
# d* t# [; y8 U1 J2 x/ k( _* _ - <span>选择的值为: {{ checkedNames }}</span>
3 H) S1 |+ W# [) T& r - </div>. p' w6 e* _- k4 j" w. P. Q
- ' L& n" L: a. a ?: j
- <script>0 R* g5 t9 @3 |4 K+ g
- new Vue({% @& i8 m9 W, y" s% l' b F9 `
- el: '#app',
. v% i0 ]; K t - data: {* H" @& \5 i& f9 l$ ?
- checked : false,$ e8 f5 {- U0 M
- checkedNames: []
. h, m% r! o5 U( O - } y; T6 U c3 K/ o
- })
q9 q$ f9 e" P, { - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
; f' I, j' c/ K" ^# P- <div id="app">
$ U. H8 A! z% f; Y. I9 i& @ - <input type="radio" id="runoob" value="Runoob" v-model="picked">- n2 c% n5 O+ n
- <label for="runoob">Runoob</label>9 d6 [: d4 V, m# t
- <br>5 |" z) \- q) ?3 H! ?1 }
- <input type="radio" id="google" value="Google" v-model="picked">" B$ d( ?$ L( T0 s" J& Z
- <label for="google">Google</label>
) y' @5 O' j0 H: N' U - <br>
9 }' g9 R0 t [ - <span>选中值为: {{ picked }}</span>4 G, l9 a. n( h+ a Z1 P b& M
- </div>
( H$ @5 D$ L6 t! [4 G -
' q) F7 I. K8 k' u6 ? - <script>) \7 O$ G7 v" J/ d& A0 w9 K
- new Vue({
7 m( |9 w- ]+ a1 U' C - el: '#app',2 J6 z% S/ h/ V4 Z: N
- data: {
' o# W) v- X1 E& b0 r6 f' b - picked : 'Runoob'
( K6 O3 H# h6 ` - }; W& `8 C M& p) }" d( `
- })
8 o9 P7 G$ _2 k. z1 ~. V+ d - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
' F" v# v# s2 K- <div id="app">
2 i, z0 ^5 S/ M& E& H/ w - <select v-model="selected" name="fruit">) A: z% V$ C$ N; o1 K) b) l% t
- <option value="">选择一个网站</option>
4 U7 n! j1 j' y2 E5 E - <option value="www.runoob.com">Runoob</option>* i9 u$ t3 Q; B; [9 v% t: w$ N; C
- <option value="www.google.com">Google</option>3 z) G& b( ^9 q& P( ~ r! ]" p
- </select>: f. a+ |, o. ` ]
- * ]2 D- U0 U8 |7 G' W& ~, r( N/ {
- <div id="output">
- p# ?. M& b: O* ~, f - 选择的网站是: {{selected}}
, g' F9 g; t4 F6 C& j - </div>
; G8 h) c5 p( z4 @6 V; J6 K - </div>( {. | ~1 y; j: X7 U ?# z; Z
- : h( `3 s+ v% ]# ^9 L" S* D
- <script>
& i6 ^2 ~) u# ^% e' P' C& V - new Vue({
% W+ [4 L* t1 H; m$ g% i1 Z' J8 { - el: '#app',
+ ~! S- l* D4 i/ e: u - data: {
# X1 t$ p% |% M3 H& q - selected: ''
0 m& i( ?. x: H6 b: \0 r. O - }
( F( b+ H0 K! R/ L+ F - })1 \- y6 T' x8 M7 X
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
" r( ]% H" [& {% } - <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({
" |! @" x E1 e4 ^; w* Q - el: '#app',
/ b0 z5 s5 k7 K9 `2 n* d# A. } - data: {
8 B: Y6 W/ R) B) m3 y - checked: false,
) [- B- o5 ?7 `$ d: J) L* l: _% o - checkedNames: [],0 b( [* T) }5 K+ a/ _7 ?" z
- checkedArr: ["Runoob", "Taobao", "Google"]+ V X( R5 t( S" m+ i2 D; b1 ~
- },
- U) K- E# B% Y8 c$ T5 m/ |2 n - methods: {
6 E+ ^. P7 U5 t, {% _. U# `6 @/ r2 D - changeAllChecked: function() {
) F. a& q, H+ O( w5 ~: P - if (this.checked) {1 H" { g/ Y, V% _# ? \& U1 ]
- this.checkedNames = this.checkedArr. `" @8 J2 a6 P+ u T$ g, S D3 x7 \
- } else {6 S* p Q! {" J! B% ^' g2 t
- this.checkedNames = []2 p3 Q0 A# c6 N" U2 n
- }9 V4 ]0 ^$ `2 t+ o" Q
- }
# q+ Z) K9 \4 H$ W. D8 j- y8 l - },
/ k9 f2 `4 W( P6 v* C5 p - watch: { w5 Q* [( b6 _
- "checkedNames": function() {! [9 K- d# j3 [6 ?3 g: ~
- if (this.checkedNames.length == this.checkedArr.length) {+ ^$ m& {* ]# D) }" w3 P
- this.checked = true' k3 T. Q) H( H
- } else {/ R6 |5 X1 c- {) ]. F% d2 h
- this.checked = false. s, Q' H* t0 J$ K( V
- }! G( x7 \0 l, |+ P3 {( S# q
- }
) T" I0 ]; Y0 ] - }
* D$ [1 c9 }, Z) M( N( \- k - })
复制代码
5 a4 o P' H* Z- t$ v6 @$ [; q% z4 `; a( u! e; g6 R# B* v1 b, f$ G# i# P! H
( ^0 c+ O. v3 G4 b! E5 _
, u% c& a9 I. _1 b. P6 j# \
. r5 X9 p* W& V
3 b9 P6 U9 I) c' x' h& q
: J5 j9 E4 K1 B/ V' H% \
$ s! x* K# R5 `, o: F: ]( D |