这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: " M( K# i; H4 Y% } [. \$ f
- <div id="app">
- d6 E. O+ U3 @4 z* V% o - <p>input 元素:</p>
D' e, ^: D. v7 }# A - <input v-model="message" placeholder="编辑我……">6 [# q/ D! T3 Z4 _: A- L8 c' v
- <p>消息是: {{ message }}</p>' | O" ]# b |; U _
- " R7 u" m5 [% X% L! j" p
- <p>textarea 元素:</p>0 ?% F s- Z0 p9 q* T) u4 s4 |
- <p style="white-space: pre">{{ message2 }}</p>
! x% N/ a2 G- H - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>0 v1 ^1 Q; `8 ~+ j% ?+ _, U
- </div>$ u& [. w5 I4 k1 s2 A- \. j
-
p. i( A/ S- \6 c: w0 B' h - <script>
8 E2 F5 \7 y' l: l - new Vue({) A3 P/ j) |7 C$ M+ b. Y- J
- el: '#app',- [3 A c1 n1 Z3 W% H( o
- data: {
% F$ D& I1 o2 \8 Y) d$ x( Q - message: 'Runoob',
% @, t0 p. t: R& L! K - message2: '菜鸟教程\r\nhttp://www.runoob.com'& n, |/ d' v" I
- }1 q( ` p* M& A: r H
- })3 _6 e6 k m! C$ y
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定:
. b3 H0 Q" t" E; p! |- <div id="app">8 g4 X0 `/ O8 s
- <p>单个复选框:</p>
- {! A' s9 n3 [4 v) _ - <input type="checkbox" id="checkbox" v-model="checked">
! d" F3 e6 d9 |7 z% Z - <label for="checkbox">{{ checked }}</label>
4 t" n: r% I/ u7 Q2 l -
+ U4 B; S* ^& e/ l- A - <p>多个复选框:</p>: V u0 y0 b1 v$ i
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
& W7 q, Y; m, b' D$ \3 g - <label for="runoob">Runoob</label>
' } G8 l. ^/ z6 A - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
! P- S2 y! A/ O0 Y3 n - <label for="google">Google</label>
, A ?* R" H/ K - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
! }, D! c# R+ P+ I) p& i) F - <label for="taobao">taobao</label>% e1 C2 E( @ U7 V0 R7 {! @
- <br>& A' x" W6 N7 t9 M, E% Z% d
- <span>选择的值为: {{ checkedNames }}</span>
1 j. S1 v# O' d( u" ]. k: o8 F* w; v* ^1 _ - </div>
" m' h. A9 G ]7 r$ o5 w, t -
2 Q" g. W" @* I+ B) k - <script>
; C2 `7 |" d9 A! r - new Vue({) C2 M0 f3 u2 D4 h* T$ Z
- el: '#app',
+ K o) @ v* `' R+ X - data: {
5 ?0 J1 t) b% N4 r( z- H - checked : false,
! ~/ x1 `7 I9 S7 y' I% P( S - checkedNames: []: q' Z9 E& N% W8 [+ }
- }
7 {: p& ^1 x7 R+ y - }). t3 E3 x3 x. l7 q& F+ ^" l
- </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮" G: O2 m# E6 F
- <div id="app">
0 D5 m1 G3 d5 Z4 a - <input type="radio" id="runoob" value="Runoob" v-model="picked">/ o: {1 O- g( K$ ?5 ~
- <label for="runoob">Runoob</label>2 Y# Q/ P' V4 S, U
- <br>7 c* W+ b% ^6 o. n5 E
- <input type="radio" id="google" value="Google" v-model="picked">
+ k$ k% U* V' w3 Q/ Q, e! O$ E! N1 m - <label for="google">Google</label>% X4 @( e" R6 S& F6 ?
- <br>0 V7 u5 {4 h! X( |& E
- <span>选中值为: {{ picked }}</span> \0 y( g1 j% P4 j" l! d: r s" |/ ~6 z, s
- </div>0 V* Q8 x+ W9 t
-
; S, F; d4 @# X* L8 W& | - <script>
! N% @+ S) I$ Y% @6 q - new Vue({
" O1 m( R0 \ {1 g: ]2 w5 h/ A - el: '#app',
2 @+ R; g2 @8 m3 q- p" j' C6 r - data: {
+ b0 M/ a5 S* r/ @: b - picked : 'Runoob'
8 z1 k$ o. e, O" t" [ - }0 X& w" e6 N- K& Z
- })
+ `! y, |1 ^! J - </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
% O# {# G* B0 n) t; K0 ^+ ~- <div id="app">
! Y$ c5 _; \; B+ @8 c - <select v-model="selected" name="fruit">
: u( H" ~* F8 Y2 O - <option value="">选择一个网站</option>
7 v( d$ C; U2 _$ v - <option value="www.runoob.com">Runoob</option>
; F; |. m" _: }* c4 I8 k; r6 w( y - <option value="www.google.com">Google</option>' Q* F/ [9 V/ N: q
- </select>/ z* |- U% W1 ^' e
- # C* _4 o. ]$ Y3 }7 j& [2 S; D
- <div id="output">
& z4 `3 |& ~: u( q; h3 C1 ~3 d - 选择的网站是: {{selected}}
, G. O) d i' n; ` - </div>2 g- H4 c7 M" d0 a* E8 l
- </div>+ F n k$ `5 o' k. Y
- # W8 ^8 c j! q: c
- <script>
0 b; r, F0 n( o4 x% p! X5 Y7 A: y0 ]- h - new Vue({& H( x% d6 i8 f4 F; t
- el: '#app',- V9 y4 @7 L8 F" ?4 r6 p& B
- data: {
0 R+ L6 ]( {4 o5 ?/ d0 X$ B* t. x - selected: '' ' j* D& }( I, } ^* U* |
- }1 s! k! i# m2 A& m
- })0 W" k: `/ @. v+ i, l% a" V# U9 N7 R
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
+ W) E0 F! g: R& i - <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({
0 @2 z# S6 E8 `' w2 m* i1 c - el: '#app',( {( P1 v+ O- ^5 N$ b8 Z4 |7 l# p
- data: {1 ^% q) Q' j+ O! b
- checked: false,
+ W) R- P$ g, x' f) p - checkedNames: []," C6 [/ z. h" w% w$ O& y; V9 J0 D
- checkedArr: ["Runoob", "Taobao", "Google"]
; j# T' P/ m1 z% h8 p - },* \1 F' @. S; c: F$ x1 [
- methods: {
) j+ a8 G( v8 W- ]2 L - changeAllChecked: function() {( m9 \* @, A) D
- if (this.checked) {( B. J8 N7 z1 M) G2 k. ^
- this.checkedNames = this.checkedArr
% y; V7 @& j8 P. n9 C - } else {- W- N4 G" U: w. J, A8 _( n
- this.checkedNames = []
" e0 [ e* y% K2 ` - }
5 K# e: E, l' r& u( O - }
1 U# _$ B% T/ _: M* x' n$ B - },7 ?! k8 t* j6 F& ^# T* C- `# E
- watch: {
4 u' X/ w4 i( a* {( @ U - "checkedNames": function() {
5 I9 A4 M% @. E6 R5 H' Z$ S/ z - if (this.checkedNames.length == this.checkedArr.length) {
5 `8 j$ B3 d3 I4 n9 w \ - this.checked = true5 F1 d3 \& l; J) z7 u2 a
- } else {9 C N, k+ N6 i5 F& b! j3 L9 P4 G
- this.checked = false
' ?& I8 C* ]4 P+ ^5 l, i, T - }& a \8 j0 E; R+ R7 p0 |
- }5 N% l! v, G, @8 c: y
- }+ Q3 n: I6 p! f8 E, ?
- })
复制代码 f0 B. e/ a5 h! ]5 r0 v
6 ^( N \& c+ c& `& t7 X
& ]# x- P; Z/ |3 O
& ~; q% G; l* N; e! \- m1 w5 l. N5 o; |% i9 h& j
+ y" m5 Y0 l' i0 P. A3 f* ?" X% n O& b+ P( o0 h4 c0 e- H
+ T2 X3 p% M* j a* _/ | |