|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: * A6 o- j" p9 ^+ c
- <div id="app">. Q( m- q. D1 Z" E: ?
- <p>input 元素:</p>5 r) q2 C0 i$ F3 r% M) |
- <input v-model="message" placeholder="编辑我……">
! H' D0 `( D& p$ E: _ - <p>消息是: {{ message }}</p># N( m5 n5 Q1 S+ Y2 A
- 6 f! O0 Q7 M7 y4 S8 S' N% }1 O
- <p>textarea 元素:</p>
3 E5 ]6 c7 Y/ @( k; T+ o2 e; c; F - <p style="white-space: pre">{{ message2 }}</p>
9 U* Z4 k: c# h% _7 j( O) a2 e# K" [ - <textarea v-model="message2" placeholder="多行文本输入……"></textarea># z5 q) S$ s, R6 `+ H) t9 E+ k
- </div>
' t2 U" s2 `3 e7 C' \ - 8 u& u, c4 @" f, T5 a& r ^
- <script>
3 M0 |. N+ D# x6 O' a! Y - new Vue({
$ `' h3 s0 m& Y - el: '#app',2 j# i6 K# F, E9 r, J0 j3 w. K
- data: {
' O) n j) p2 S - message: 'Runoob',, ^7 e ~# n( d2 ]: i' A
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
4 r P& h0 r1 `0 b& b - }! f8 ]% h |5 |& ^+ e8 i
- })' h' {. j7 ~ V! Y
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
1 t5 ]- H* _0 d: y- {) ]- <div id="app">
2 U' Q; B0 {6 A% @ c* C0 g+ M - <p>单个复选框:</p>3 Z' Y- ^; J) h1 V: @+ e
- <input type="checkbox" id="checkbox" v-model="checked">
7 v( h$ w+ t1 J - <label for="checkbox">{{ checked }}</label>- N. F! {( k; y: V+ N6 _) b$ C( ]
-
7 N# H( U8 c0 [& N2 [/ n% f! R - <p>多个复选框:</p>
: [: T4 O9 E3 @4 U8 t% Z - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
- Q2 `2 f) W* s( O. h% `0 F8 I - <label for="runoob">Runoob</label> d2 V5 ~' S. ^4 l6 l0 a" e
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">1 s; w9 Q% u/ k* L, N- C- Z- k
- <label for="google">Google</label>
% N6 S( m# D9 {# L - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
& v' N4 s8 J7 T% o" R - <label for="taobao">taobao</label>
( Y1 X' M( g! E# D. j% V - <br>
& O- N/ u, ]& V! ]# v( s9 r1 @ {" A - <span>选择的值为: {{ checkedNames }}</span># c. s% i6 E2 N) x$ t
- </div>
; s; W7 H7 ~, F& L -
, R4 ^) K2 M& e' g J' \ - <script>
) ?* H! t; g) n% E6 Z! K/ |! ^ - new Vue({
: r+ [5 M8 j6 M& | - el: '#app',
1 t y5 ^# f" j3 ? - data: {* C1 P( ~$ g/ F
- checked : false,
3 L$ ]/ H' Q9 Q - checkedNames: []. H% b/ F& z, M: q0 O
- }/ ]. f8 E; R0 ~6 @ |
- })8 [, h8 r6 t- v7 H
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
( _- Q4 H% X9 H* W7 S% B- <div id="app">
% Q3 L/ {( Y5 n' T" U - <input type="radio" id="runoob" value="Runoob" v-model="picked">; n3 g, s' l: w9 l
- <label for="runoob">Runoob</label>
: f$ N) }/ _0 D, h& K- F2 z" B% H% j - <br>( u! I* W8 z9 w2 S! X
- <input type="radio" id="google" value="Google" v-model="picked">0 u1 z, @2 _" D; H7 B" @
- <label for="google">Google</label>
2 i/ f$ S$ Y" O$ n: k& V9 m - <br>( p4 C) d/ a k4 G1 [+ ]( V! |
- <span>选中值为: {{ picked }}</span>8 y% m' t- ~3 z' B) i$ x- Y
- </div>9 ^1 U" ^6 u4 k
-
. v, k( f( {% T - <script>& A) H/ H, j7 G' T9 |" G
- new Vue({
+ B1 V- g" w5 I; ?* `2 [4 p# \$ Q - el: '#app',6 L% a& ]0 p/ A1 G( d; ?- f
- data: {$ @/ T9 r" p) m1 @+ ?' k3 ~
- picked : 'Runoob'
6 t8 M6 s$ Z( N- K' y9 a2 } - }$ k+ i9 X+ c7 {. w5 m2 H7 Z
- })
) K1 z" J% N0 C& W! f - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
! I1 A9 E0 e& m6 { W& g2 }. u- <div id="app">) U) T5 m# ^3 k, ]+ p( m- E
- <select v-model="selected" name="fruit">
: ~ o9 y6 }2 M - <option value="">选择一个网站</option>
' b* l4 W# B. x! z) n - <option value="www.runoob.com">Runoob</option>
4 P& u# |, K$ u: h - <option value="www.google.com">Google</option>% s' P9 {/ S7 Y' m7 L! m( o
- </select>
3 y) R6 I; B0 C% T" R -
5 g1 X$ u6 f( Z- g$ f- [- Q - <div id="output">
; u* b( @5 u! g" }4 K3 U - 选择的网站是: {{selected}}
' y; W0 I7 W( m% u$ y' F! W* w - </div>
x; m5 E) c& k7 H9 |% r - </div>7 K8 w9 ^- P2 {4 h1 w
- 2 U6 |3 J4 \4 e; a! E7 N
- <script>* d# o0 U2 G- @7 T; t0 @# s
- new Vue({
, t: g. n+ ?, j$ S8 p% L+ g - el: '#app',
) ?( v, [3 k2 d7 R - data: {
" `4 ^: ^" i6 x& \3 J- l; s) n - selected: ''
- m) b( b( \& I! y/ m$ L* \ - }
/ s5 ^* z$ D) {/ v6 i, o+ W - })
6 Z+ Z( p! W, E. O1 K - </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
; R% Q3 V, Z7 W" }0 |& h+ D0 X8 P' E - <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({, m2 t5 k0 u m* m+ e
- el: '#app',) J) H+ h$ [+ J5 }
- data: {
+ u8 _3 r2 v1 \' [ X% a! H% u; N3 o - checked: false,
% }1 l0 j3 ?& e X2 [* z, z - checkedNames: [],
6 i; o: G S: o2 e - checkedArr: ["Runoob", "Taobao", "Google"]7 l- m9 L. O6 `! R6 A. X) X8 G: C' q' R4 p
- },
% p8 _1 C5 J: D" @% l& Y6 R" K - methods: {
( ]0 L# U5 r, B ]) p! u - changeAllChecked: function() {
# V- n( ~- E' j) v3 x! G - if (this.checked) {$ ]% |" S8 A3 X
- this.checkedNames = this.checkedArr
' n9 f' w9 f/ _. e1 f: g' ` - } else {. _2 Y) Q" r; U% N# i% e
- this.checkedNames = []; i: m- A; B6 O0 t$ Y. ~
- }" {% ]- ]6 x: z) q
- }6 b! E3 b6 C" Q/ T% B4 a: w2 Z8 f S
- },
9 `; ]: E$ W4 o; W( N S - watch: {# v" R$ \$ J3 E
- "checkedNames": function() {
2 B; V+ x1 i7 c E- V - if (this.checkedNames.length == this.checkedArr.length) {
& c. u$ K+ Y. W5 t" E2 \8 } - this.checked = true! O, I* Y- g( c* w( e E
- } else {
, n; R; w2 ?+ a5 m - this.checked = false
# x+ q; {# e3 {0 M4 C - }
4 A, L( M8 ]* I, H - }" b# e* V; v" i4 k
- }5 M! u. h' ^6 s7 n) C8 `% a
- })
复制代码 6 g/ e" c2 a0 c/ L
# F3 _% f$ P, K# t. H8 Y0 t
$ v7 w0 J( Q( f* N- O: |" R8 O
1 d1 s) c( M8 Z+ y3 W
/ Y" Z; U# S8 K; B# H, |* f, f5 f( M6 q) x: o& Z1 r7 U' I+ f
. X) u, U- D. P5 R$ z6 E
& `" `( C. L; [# `5 B/ h# W |