cncml手绘网
标题: Vue.js 表单 [打印本页]
作者: admin 时间: 2018-7-4 11:22
标题: Vue.js 表单
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
: r" \3 j7 N& [. q/ I0 a
- <div id="app">
& ^5 S' F; S& ^' \0 \4 G7 n* N - <p>input 元素:</p>
; Y* Q9 ^+ B# y# o" ] - <input v-model="message" placeholder="编辑我……">8 G/ N9 A Z- S
- <p>消息是: {{ message }}</p>- k/ i, t; Q8 a1 l$ S) Q$ M/ `) d
- 3 v& y+ @9 h( {; y5 N5 P0 r
- <p>textarea 元素:</p>
9 N: { }$ c: b$ } - <p style="white-space: pre">{{ message2 }}</p>% S/ q1 i9 c: t2 U& v9 h. ^
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>( }5 }9 ~3 [7 y% C
- </div>
6 U1 l' k1 k+ ~9 {5 `# z - 0 ?5 | a, C& D1 Y0 S
- <script>
0 W0 c* \, W9 ^% r- F! x T - new Vue({
0 y9 F# S7 _1 L: e: R - el: '#app',1 d$ t: [' Z c9 b2 e
- data: { r# n. ^* Y- f1 a( K4 O
- message: 'Runoob',
! v$ B/ O3 ], |. s; N - message2: '菜鸟教程\r\nhttp://www.runoob.com'
: R1 X+ ?/ s) F e: b' a! W - }1 ]* z/ h7 S; I9 Y- ^ }
- })" g7 i; V8 X' y& \
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框以下实例中演示了复选框的双向数据绑定:
) U+ F! V0 g- @0 }- <div id="app">
`5 g0 ~; d8 _ - <p>单个复选框:</p>( l& ^( V3 g5 L9 S( M* K. e+ \9 v
- <input type="checkbox" id="checkbox" v-model="checked">
. d, T5 m) n( ^$ K; v7 ` - <label for="checkbox">{{ checked }}</label>
1 M E1 Q; h2 [! p7 u1 x* @ - 6 h- x5 K* Y( X( n
- <p>多个复选框:</p>
3 ?* @3 X" h/ L( H, } - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
" }+ p, t8 a) o% L* I& c5 U2 q - <label for="runoob">Runoob</label>' H1 u/ Q3 K C+ j1 K8 \- y( T
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
4 ^! z6 ^- L6 q6 `3 n - <label for="google">Google</label>
/ u% e! R4 B/ ^$ K6 a8 [/ u' ~) K5 z& t - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">0 H+ \+ C9 f" O8 y) w; ]1 A! Q) O
- <label for="taobao">taobao</label>1 ^. t2 k+ z$ J3 ], h# g% V- m
- <br>
, |0 p9 n9 [" c7 F6 @" m6 D& d7 H& J! c/ I - <span>选择的值为: {{ checkedNames }}</span>
: ]/ D1 M# p+ Z# k. K6 Z1 M - </div>
8 V \6 M- z1 L* H -
- D' F; ~6 i" p" p - <script>
7 j* R3 T4 y+ p2 V - new Vue({
0 H! Y% G: o# u1 J2 Y9 R& B" E - el: '#app',
8 ]* `% X) u1 `; r$ T" j X" Y - data: {
- d% E% h% O- i8 A# c |- s9 `; Z - checked : false,3 C% x, u. t! M3 s9 ~
- checkedNames: []
9 ^" d' H/ L' G. I - }
5 Y4 D: x# R0 I- k3 B; R8 K* F4 l - })+ ^* j$ F+ n6 r: [% L2 Y6 E7 q7 L E
- </script>
复制代码实例中勾选复选框效果如下所示:
单选按钮以下实例中演示了单选按钮的双向数据绑定:
单选按钮
- P: [; d* N- n5 l% o- <div id="app">
* [& Y( S0 l' b0 u2 x" _ - <input type="radio" id="runoob" value="Runoob" v-model="picked">
* f/ |. w: h! r - <label for="runoob">Runoob</label>0 c# [$ x% h- }- c* _
- <br>
3 k1 g J [. P% v/ d0 N - <input type="radio" id="google" value="Google" v-model="picked">) {; q6 c1 N5 l$ G4 E
- <label for="google">Google</label>) q+ a5 T/ B/ [/ A
- <br>0 }5 m$ t' n+ T# B. I
- <span>选中值为: {{ picked }}</span>
9 V9 k1 A6 C' e - </div>. b4 ?! ^' Z, C9 w. q2 ^7 V* B
- ; H6 f! o& J' w, D( w
- <script>
4 _( j( \# `% D+ ]8 P - new Vue({' J+ d9 T2 M0 g* j
- el: '#app',$ H7 V9 ~+ H: c4 E
- data: {/ w A9 Q4 Y* o, S) F) K
- picked : 'Runoob'- p5 O$ ^3 o2 }( g4 G! N' K/ F+ B
- }' F! x5 X6 o( g( K( O5 a) ?
- }). {6 O4 b& P9 V/ ?0 n: Q
- </script>
复制代码选中后,效果如下图所示:
select 列表以下实例中演示了下拉列表的双向数据绑定:
select
% W, g' \: p, x( m% T6 ~2 C- <div id="app">; m* v5 G' s" z) `0 z7 S5 p
- <select v-model="selected" name="fruit">& K# u- r; A- }+ Y. f
- <option value="">选择一个网站</option>
- x E6 i& \' b - <option value="www.runoob.com">Runoob</option>
$ L8 q' N. x! e) p! s, w/ A* B - <option value="www.google.com">Google</option>1 k' v' |7 ]& c+ N% Y
- </select> i6 }) ^$ D( L
-
! `2 H' P! b( a* z4 k* @ - <div id="output">
6 g/ _0 _5 k$ k3 M8 C& z* U - 选择的网站是: {{selected}}
$ k: C5 P( W# l5 j# v9 ] - </div>
2 }: H$ P) K* g9 U - </div>1 S9 a& y2 V/ W
-
: V" l+ ]8 ~, w - <script>* s6 e ?! U o3 m4 b
- new Vue({% W" V( B; d, R+ E/ e+ a( ?& R
- el: '#app',
( R$ a3 y4 E8 y; }/ \- Z. Q% V2 L - data: {
1 Y3 n: W! F: Q! _, D, n - selected: '' : B% ~: s( a8 _! a
- }
i* ]. \+ _% A - })9 X/ N# e- \' P( \" d# x
- </script>
复制代码选取 cncml,输出效果如下所示:
修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
- <!-- 在 "change" 而不是 "input" 事件中更新 -->
. H* L. T% X) k; _1 b, ` - <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({
/ ~# D% V( s# T6 L6 s* g - el: '#app',# f! P7 J/ g: @6 \: V
- data: {
+ ^% l# {% Y0 Q8 E - checked: false, V9 ?% i+ S$ w: U
- checkedNames: [],/ w/ Z; s E, ~/ t$ r- i
- checkedArr: ["Runoob", "Taobao", "Google"]' u/ J6 R8 T( P
- },
: }3 d! M# e" D ~ - methods: {
- x2 L' l4 ^6 E( O' _; P1 }+ M3 l - changeAllChecked: function() {2 _& S; {4 o" |1 ]% }
- if (this.checked) {5 }- i) m9 W7 F3 v% I5 i4 d
- this.checkedNames = this.checkedArr
. ~6 z4 C4 v) o' r - } else {
: n) ?0 F, i( B3 K" F( B8 `1 S - this.checkedNames = []9 N3 U* T, \$ B. }: v+ W4 Y
- }& s+ r2 i1 f8 r4 E: ~ @
- }
( T7 W5 }; ~4 A( k5 d0 w! x - },
! [2 D' R: l6 P - watch: {4 W& `6 I+ Z8 k" t0 e; x) e: J0 Q- h
- "checkedNames": function() { c" ~( v8 y# R$ z. @
- if (this.checkedNames.length == this.checkedArr.length) {
T: W7 `9 s( a; }8 O, m - this.checked = true
% A( L+ q D+ _% M) o8 [ - } else {
7 I# ?" T# S- e - this.checked = false8 |6 v! Z: m2 `' I
- }! b& K9 k5 {- {1 J3 M
- }+ t" ~; @) ]+ v5 U& p; j0 o
- }0 J+ o7 y& v; P
- })
复制代码 5 Z/ d6 M6 ?; r, J0 J( F
8 Z5 q& D- A: n0 Q6 j
& \. o( Z8 K" P3 @
* R) {9 o" f. \+ A
/ I" N: o; J \: V" q$ v* X
! G' G" t; i' ]" W0 K% w( [
9 ^6 p! u X4 ~3 `$ a' h, {9 q% h8 }$ Y
欢迎光临 cncml手绘网 (http://cncml.com/) |
Powered by Discuz! X3.2 |