cncml手绘网
标题: Vue.js 表单 [打印本页]
作者: admin 时间: 2018-7-4 11:22
标题: Vue.js 表单
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
* q" U2 H9 ?# t+ \: t0 t
- <div id="app">
; d1 ~8 _) L8 L1 \& D! v - <p>input 元素:</p>
/ ~( P$ @( ?: T! ` \. y - <input v-model="message" placeholder="编辑我……">
: B$ v' ^! s- D; ?) u+ }% d - <p>消息是: {{ message }}</p>' b( Q* b0 C: f% C! c) m
- 7 S9 `% F6 ~! k3 K6 b
- <p>textarea 元素:</p>
# r4 \ x3 L2 f% F. @. D - <p style="white-space: pre">{{ message2 }}</p>0 p, c. ?5 o: l8 }! K' C4 e6 J
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
+ _* {) a, L+ N - </div>+ _5 S- i1 I. Y- o* a8 B
-
6 ^/ f3 ~$ z0 X# A: E - <script>4 y: N! s* m) I& |0 ]; U9 E
- new Vue({
6 m0 R6 Z3 t$ R, d6 {& K6 D3 G - el: '#app', C. y( g- Y1 j6 f
- data: {# O: p/ w1 H& C( u6 _. ~( P7 ~* n
- message: 'Runoob',
4 k' I( X( \ N$ \- K - message2: '菜鸟教程\r\nhttp://www.runoob.com'
0 [' I& ]- o6 l6 Z- X/ Y% H - }$ Q0 Q( N0 E8 P" l8 f7 z( C
- })% |* O1 A8 a* s0 U2 c6 M O3 [
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框以下实例中演示了复选框的双向数据绑定:
: d+ h/ ?0 V5 ]1 }, w6 c: h1 T$ ^
- <div id="app">
+ D5 D# G' I+ @: N$ G/ S$ }% N - <p>单个复选框:</p>' r; W0 y2 x6 K( Q0 m0 J* F
- <input type="checkbox" id="checkbox" v-model="checked">
9 A% n7 b! ~6 Z4 q - <label for="checkbox">{{ checked }}</label>
, C0 Y# D& T* x8 v4 D -
* L- D1 X. q% q! Z - <p>多个复选框:</p>
/ a l8 z, B' F3 z }( `5 Q2 e - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">4 h$ f( f" j! A; O! [
- <label for="runoob">Runoob</label>
) S/ p1 }" x- ^5 _5 X% T - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
, X7 c- }$ w! Z$ Z/ o4 b4 { K6 \ - <label for="google">Google</label>1 w8 p+ |2 v6 a' J
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
1 F' U9 _+ o, [' e j - <label for="taobao">taobao</label>
3 P# d" ]/ P$ m, o$ a+ n5 B9 t - <br>
$ Q c. ?$ Q l1 ?) Z5 i1 V5 l) Z - <span>选择的值为: {{ checkedNames }}</span>) f0 O6 ~1 y2 `1 K
- </div>; w8 f% ]7 [' Z7 F( j# `/ j
- - Y U; ]" ~1 k, y) J; F
- <script>
6 j6 d2 l/ q( T8 B! ` - new Vue({; c# ?7 }# h0 o9 A$ _# E" C& J8 q* P
- el: '#app',
/ ~0 ]% y, J2 Y - data: {6 M; n0 e7 G# f
- checked : false,
Y7 u: o2 z$ F) k9 I - checkedNames: []
& j& K' V1 c# {7 K - }
' C5 K8 K- z' Z! Y - })
& P$ D4 H/ v" q$ G$ d. ` - </script>
复制代码实例中勾选复选框效果如下所示:
单选按钮以下实例中演示了单选按钮的双向数据绑定:
单选按钮; J) C# D. B* T# B, U! k
- <div id="app">% X a/ r! U2 t# w- b, X
- <input type="radio" id="runoob" value="Runoob" v-model="picked">' q! f+ ?: S& G+ L/ _
- <label for="runoob">Runoob</label>3 ]4 _* i' ?1 a/ u* I
- <br> X3 e5 u2 u2 W
- <input type="radio" id="google" value="Google" v-model="picked">
6 D+ i W) [( P5 c$ I# [2 D$ x - <label for="google">Google</label>
3 x9 p: X( r+ m" ?, {( ?* [ Y - <br>; J# y) f+ k2 }) s
- <span>选中值为: {{ picked }}</span>. F L. \' k9 O' d& q1 B4 F
- </div>
% ]! V1 U% K' z$ C/ @% { -
/ C9 \0 X2 ^8 E/ s! o# M - <script>! V O/ U; B" s0 `1 ^, Y( K+ ?1 N
- new Vue({
7 k" m, N& o& T+ f - el: '#app',; S3 o, p f) h4 O* O
- data: {# i/ D j) t7 @
- picked : 'Runoob'
% @4 w+ a G' Q8 d7 H9 M, F$ j( g3 D - }
; `/ }. Z; ^* B' s/ m! Q2 C - }) p) q8 a) u: G# ^
- </script>
复制代码选中后,效果如下图所示:
select 列表以下实例中演示了下拉列表的双向数据绑定:
select
5 C; r' _' Z* T& G' i4 o- <div id="app">
; p0 q; T$ _& H: O6 J - <select v-model="selected" name="fruit">) v& K! g7 r! W3 j; U q
- <option value="">选择一个网站</option>
+ K4 A9 w2 |1 F - <option value="www.runoob.com">Runoob</option>% z& R9 }) Z/ q1 G; P$ T+ p2 {
- <option value="www.google.com">Google</option>( f3 O3 m f4 b" P( L: ^3 P! ^/ s' v" g
- </select>
. W# d( V1 f& q' H# m -
: I# H! Z( p) Y6 u1 R - <div id="output">
; @8 [" v7 i7 n( i8 p3 `& X1 Z - 选择的网站是: {{selected}}# \4 c3 B# r2 V! {0 ^4 D
- </div>, {# k) g3 }1 P. S. v8 |/ A
- </div>
. ?8 x6 t4 W) {+ R: D0 M: J -
5 n, K* |& U3 v3 z$ O c+ [ - <script>
% X# a6 B- i& ^* }( d - new Vue({
" F' A8 {9 T, f8 C9 L4 I v - el: '#app',$ }7 `9 \) N& A% V
- data: {6 V) }3 k3 v$ i6 P2 d# J1 o }1 K5 D
- selected: '' ) R- q6 L& e4 V, W. W
- }- i/ l3 w' N" @ V
- })
2 k( z. g! r- ~: s' t - </script>
复制代码选取 cncml,输出效果如下所示:
修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
- <!-- 在 "change" 而不是 "input" 事件中更新 -->
u! S, t8 k4 e. 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({
7 r' g0 B: M1 P+ Q3 J - el: '#app',
1 s3 N8 v0 T' M - data: {4 k% x8 u9 }, _) o- a6 X: e
- checked: false,
9 l2 }8 m- @) s8 D& \0 ^: h - checkedNames: [],/ T% S- P1 L; @2 E4 F; b' c1 y
- checkedArr: ["Runoob", "Taobao", "Google"]. @% ^9 ]% j/ e9 ^
- },
' U8 v0 W2 M/ Y: @, m' E2 F9 u- f - methods: {. H `' d* `. u" ]4 a
- changeAllChecked: function() {
/ W+ y" z B" v; \6 X i - if (this.checked) {5 ?+ ]. N) j$ b, w
- this.checkedNames = this.checkedArr
6 b) a1 V1 V. a0 L3 G6 k - } else {2 \4 c5 ?# z; M# \. E
- this.checkedNames = [], B7 d4 R8 c Q
- }
: q5 m5 E n1 x: B - }
5 ^" u+ K0 L4 E - },
" e) s7 M/ s9 J; [ - watch: {* W$ X- c) ^; o1 g- ~ N" G8 w
- "checkedNames": function() {6 `, j- ^* {) f) B/ [. a$ C- A
- if (this.checkedNames.length == this.checkedArr.length) {
0 ^' P7 x3 X1 Q, s# [0 U, y - this.checked = true& b; K+ ^9 c |$ F$ @! W: Y7 q
- } else {9 _2 \- y0 q0 P2 U9 `, W6 x
- this.checked = false
. b+ W9 [! G3 q# A' } - }
( Y1 q3 s2 E( d: Z0 q7 r - }
! B' x2 q6 w% R - }
) m8 I( K+ O" i, |4 W - })
复制代码
( c! U u" g5 D9 L3 c4 @4 [
H* {/ B" u- S! p/ r0 k
! Q( [6 \9 u0 v3 T2 N
" j' R4 Q0 m1 H% @& K- W3 o
) W. ~' G: q! e3 y# ?, {% V. }! g; {7 e! ]; A: T
, C8 L( h: ^% k$ l
* U [3 f; M! d0 t* u0 ^% H
欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |