cncml手绘网
标题: Vue.js 表单 [打印本页]
作者: admin 时间: 2018-7-4 11:22
标题: Vue.js 表单
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
: e% f. I3 O0 t; x( I" O- <div id="app">2 O0 y, A6 O1 o6 r( x5 G( v- Y
- <p>input 元素:</p>
* T1 t+ I. _& h5 F$ a+ w - <input v-model="message" placeholder="编辑我……">! s- s9 }3 U% G4 Q/ ?
- <p>消息是: {{ message }}</p>
. A- I1 g6 _( j7 k: M4 y - ) E" c6 r( r: U# x2 ?
- <p>textarea 元素:</p>
/ m! Q; a& ^# T/ C% N5 e( I - <p style="white-space: pre">{{ message2 }}</p>/ S& g) g4 x$ Q3 A, B, V- H
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>) [- T ^! t; R5 ?6 D
- </div>
/ z; V" j: o f6 V, g -
$ r3 `* b/ A8 u; }' t" g5 I+ f% R - <script>
3 h7 {7 z* G8 f2 I' s' | - new Vue({- B) h9 w" t3 W6 F, g
- el: '#app',) r8 D0 a \1 z/ P& f
- data: {
5 u8 U. h8 m% j4 g% o9 B# }% v - message: 'Runoob',
5 Q) h* x0 A6 E! W( T - message2: '菜鸟教程\r\nhttp://www.runoob.com'2 U# l: o7 E9 d
- } m5 F& w& a( ^+ T$ O; O
- })& M5 U' [( T3 C& X! b1 [& q
- </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框以下实例中演示了复选框的双向数据绑定:
' Q* d' g" @1 Y* o/ ]+ H+ B- <div id="app">9 B& U5 P: `6 z5 P3 \3 |' d" p+ n$ X0 ?
- <p>单个复选框:</p>$ p: ?" u4 e: r' O: y6 ^8 i3 D
- <input type="checkbox" id="checkbox" v-model="checked">
+ ^' U2 J( v" o5 p' k( n( G/ h1 ] - <label for="checkbox">{{ checked }}</label>
5 t4 H9 i, Y3 Z; o* X) l - ' H! g. [! m* q! U
- <p>多个复选框:</p>
3 U- P& T/ t2 j% k$ T4 j, H+ \; ? - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
( p% |* _% @6 j9 B; g j7 f - <label for="runoob">Runoob</label>4 U* F$ l: Z6 c9 ?: b6 ]9 x& X
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
# h h; x: E* s% S; s - <label for="google">Google</label>
& M$ i) D% r. j+ G! T - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
+ B8 \. P2 X( b; g8 D$ y - <label for="taobao">taobao</label>
. s: v+ Z& q* ^' {& _& N - <br>* P2 ], s! Z8 H
- <span>选择的值为: {{ checkedNames }}</span>
6 j- f2 s. H! ^, J - </div>6 D" F9 e3 B' t! G8 T
- $ a6 m' G& Q ?# w& t, q$ s1 @
- <script>
6 E' W- Y `8 G) T) K - new Vue({; F" s( v0 G1 E7 Z A' z) ?; Z R i/ V
- el: '#app',' b) N- }% |( e% g. L, e8 e
- data: {
9 F, j; b7 O/ }8 w7 j8 y0 z - checked : false,
9 l: l2 m' Z4 D - checkedNames: []' \% @8 r0 u; y4 A( W' _
- }3 ~- j# |0 n! t9 e& P8 u
- })
8 y$ g: P5 q4 v3 o' k. I T - </script>
复制代码实例中勾选复选框效果如下所示:
单选按钮以下实例中演示了单选按钮的双向数据绑定:
单选按钮) \( g# U5 F, c I
- <div id="app">
4 T) z4 Y/ p) V# f/ R* f. w6 T - <input type="radio" id="runoob" value="Runoob" v-model="picked">
# E+ `4 S7 Z0 i+ B) H- d3 F" G4 T; Y - <label for="runoob">Runoob</label># g/ ]: U0 u8 W
- <br>
# S/ x& _; ]0 ~3 g - <input type="radio" id="google" value="Google" v-model="picked">( Y) K: Q# B# b G2 t
- <label for="google">Google</label>3 F) b* Z/ r& X9 w
- <br>& r0 p$ l/ H. R- n! h8 c0 h
- <span>选中值为: {{ picked }}</span>
h) k) d; ?- y* N% _ - </div>2 {3 D. i1 R! c1 y
-
! _4 S! I1 i5 g* N/ b - <script>& x: \ Q: l+ p/ ^% C9 H. N
- new Vue({
0 J2 ^: t- l* j) N; S1 N - el: '#app',* N' G9 @* R( Q1 G0 p- s+ ]: ?+ A4 _
- data: {, Y5 C' p) ?2 n4 |) e: R8 L* a/ L
- picked : 'Runoob'
) N! L1 r; @1 ], {4 I$ i - }
/ B6 q; p- O- A; E1 n - })
8 {$ M* m: }) D) A5 i0 } - </script>
复制代码选中后,效果如下图所示:
select 列表以下实例中演示了下拉列表的双向数据绑定:
select
2 q7 B- b/ I; R/ H3 I- <div id="app">
5 S' s1 h5 _* b - <select v-model="selected" name="fruit">! P* j+ S# Y5 V9 \
- <option value="">选择一个网站</option>* m/ @% R2 n# W" X/ }+ z$ a3 K/ n3 X' O1 S
- <option value="www.runoob.com">Runoob</option>) n: V( z( |. @
- <option value="www.google.com">Google</option>
) ~1 ]' e* S3 q. p. T - </select>; G( E* ~4 y) I! W3 u/ s8 B4 |
- ) j+ n; w4 h* ]& c7 R
- <div id="output">
) K; q0 ^ q; d8 j6 _" K( s: | - 选择的网站是: {{selected}}* ~6 V/ ?% A- _; d% P5 R& m! J
- </div>
4 f1 l, a. V' o; b9 L) j" |9 M - </div>
. O: Y6 d) `; T7 q: F0 ` - * f0 X! D: N# x! D
- <script>' T$ j, g5 v* x1 Y4 @3 z1 i
- new Vue({) @7 l6 J/ n$ T' o L
- el: '#app',; K; a2 a e/ c# O* }
- data: {
* ^* @/ P% e# @8 g- ?$ L% c - selected: ''
; x, _3 I$ W' q - }
$ e- @0 L" k" N7 N; d - })% w- j- e. a; }: j1 F
- </script>
复制代码选取 cncml,输出效果如下所示:
修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
- <!-- 在 "change" 而不是 "input" 事件中更新 -->
2 q( z1 b0 f3 O0 R - <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({/ f3 T% E* u) X( F
- el: '#app',
5 W+ l+ x! l0 V" ^ - data: {
* R$ [8 M4 c; Y4 Y& Z! r5 t: h - checked: false,0 n( T* V- X1 v& m4 r9 [
- checkedNames: [],& w, a( o- Z' ^5 Q2 S9 p
- checkedArr: ["Runoob", "Taobao", "Google"]+ U" L) l2 o/ r& l: R6 D& w
- },
( D" ~8 q, ]5 L( m! K9 i; x) ] - methods: {* \" S Z0 n% `
- changeAllChecked: function() {
~0 a# n! } j8 P. M3 r: T - if (this.checked) {2 P$ Z" d q$ L5 W0 i
- this.checkedNames = this.checkedArr0 w; G" K7 T' N* |7 \ e8 ]
- } else {9 p/ }7 t1 r6 f8 z/ n
- this.checkedNames = []
{0 D1 {. W( L - }
( \& U3 v$ I' G5 _6 q+ e& b - }
8 q- e& I# k8 S6 U - },
9 g* M% p u7 a9 g - watch: {
' ?0 |' y0 Z; H* K: o - "checkedNames": function() {
. t% N4 T+ x8 @ - if (this.checkedNames.length == this.checkedArr.length) { D6 N' w# |8 y6 e$ a% q
- this.checked = true
" O) p& k- D4 Q: J- E - } else {8 f6 Q L2 [% Q: }
- this.checked = false
2 L8 E# R" c1 b - }) y8 y' l, i" b8 Y: S. b0 a
- }
4 b7 J' [1 N& C% _, m( _ - }
" Q8 f+ N& G1 s5 E" V4 v4 y - })
复制代码
( X7 k e( e1 }" U& o, j: R9 Y( N2 s( x9 i5 S+ j: [8 [
' L1 a4 A4 |# [6 N; j3 y
& A' U2 L) \, E$ ^
% h/ m1 g6 d+ l7 t$ ]- s1 y6 m
7 i1 h4 ] L% X7 |) J5 T
2 `" N' w# k& L, u1 o% ? L w
" v, A3 ?1 y3 Y" @; E- }& |
| 欢迎光临 cncml手绘网 (http://www.cncml.com/) |
Powered by Discuz! X3.2 |