cncml手绘网
标题: Vue.js 表单 [打印本页]
作者: admin 时间: 2018-7-4 11:22
标题: Vue.js 表单
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
5 g. A4 f G% ^, a3 _2 }. N& S- <div id="app">: W. F# |# k$ `6 ]" U5 [
- <p>input 元素:</p>
4 r# f l/ u! k - <input v-model="message" placeholder="编辑我……">
$ C$ y' [5 x% f, B6 a' j - <p>消息是: {{ message }}</p>
) Y% c+ @4 ^$ M& N1 x- V - 9 D0 u+ P4 H( q
- <p>textarea 元素:</p>
' S1 H4 @( R8 k: V" e& v7 }6 C8 ?! _3 i - <p style="white-space: pre">{{ message2 }}</p>5 K- F3 C3 `4 j& @$ z, L: Y
- <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
/ B- [: J1 U! l3 Y' A - </div>
+ N; W3 j% s7 k" J8 Y4 d - 4 W& }/ l) y2 g1 B/ Y! i0 o0 _
- <script>
( @- a Q5 `* G9 u2 y( N - new Vue({
$ ]( O. G Z+ r1 V! I - el: '#app',
! v2 s- P% b O9 B o0 r* o - data: {# ]! b/ W, L# W8 A
- message: 'Runoob',4 S* {: l; u7 w1 ~- \
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
* x' }' v+ T0 u1 ~) m, z1 v( x - }% z5 O$ e# ~3 W
- })
5 j$ U6 A/ _8 x- |& z. ^7 [2 Q& S - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框以下实例中演示了复选框的双向数据绑定:
8 B# O% o* o/ j' q& w- <div id="app">
# v/ m5 n1 B, |; v/ @5 H; ] - <p>单个复选框:</p>
6 n. y+ I: @: h; ^ - <input type="checkbox" id="checkbox" v-model="checked"># [+ v1 F5 x. A6 }
- <label for="checkbox">{{ checked }}</label>
! F9 h' F' E" P1 _9 Y6 B+ J -
# _* e; Q- W6 [& t4 s - <p>多个复选框:</p> ^1 A, N; l# K V: Q0 `' U6 i2 i) O
- <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
. B6 n/ k( h/ N& E8 ?8 K; Y8 J+ O$ n - <label for="runoob">Runoob</label>( Y. Z6 @# l' S$ e' g" \
- <input type="checkbox" id="google" value="Google" v-model="checkedNames">
4 T' O5 l4 b V p* p - <label for="google">Google</label>
1 ~. A+ \& m; k$ E& g1 K - <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">8 G, x! F7 v: F& H) N; C2 t
- <label for="taobao">taobao</label>8 y+ }( |6 _; q/ a( `
- <br>
3 P6 y' F5 Z& N3 U - <span>选择的值为: {{ checkedNames }}</span>
2 v* b2 ]& |* M# F8 s8 N( Y; ~ - </div>
! v" M3 _* S/ Y" H2 V4 ^ p. s - 0 I, m/ O t* b" z, Q
- <script>
$ M' |% h0 M, [- F# P/ g - new Vue({
) I# ?) W1 }" v1 x - el: '#app',5 ]2 Y6 R% l' ~* w/ W$ N' V
- data: {& |+ Q$ L* l; Q2 Q
- checked : false,
! Z- O& k0 J7 e9 o - checkedNames: []$ e, J9 q3 w) b: y+ ?1 Z( d
- }
; a1 [) w% w6 I& S1 Y - }): [" {: J6 N1 Z+ C2 r
- </script>
复制代码实例中勾选复选框效果如下所示:
单选按钮以下实例中演示了单选按钮的双向数据绑定:
单选按钮; p% ]) @/ q/ L1 v! `, ]* F
- <div id="app">% c A. O% B+ }5 n' p) |
- <input type="radio" id="runoob" value="Runoob" v-model="picked">
- \% a' ~0 s2 P+ S( V3 F - <label for="runoob">Runoob</label>1 D2 B6 n B$ `
- <br>
) r8 {/ f; D2 l7 E' l; C - <input type="radio" id="google" value="Google" v-model="picked">: P8 A+ u0 @0 W- r7 [$ W; k
- <label for="google">Google</label>
; Y" ]. L% \/ m; b+ b' ` - <br>) U& l" o) P( B |
- <span>选中值为: {{ picked }}</span>
( D0 S+ c6 Y* E( B/ x - </div>
* W. z. y2 U, W# k8 _9 y$ i5 N - ( y/ x+ c7 J! D# W! I
- <script>
" g) ]" y2 s7 L5 Z: C; {/ B - new Vue({: ^/ T- R9 x5 Z
- el: '#app',
f& X0 H j$ \: C* l' z - data: {- @. U& N* A7 S) Y
- picked : 'Runoob'5 W! }) |' k! b3 e$ t! L
- }
% N7 p& f1 ~. w - })
6 x- |3 R! D- i: B - </script>
复制代码选中后,效果如下图所示:
select 列表以下实例中演示了下拉列表的双向数据绑定:
select
3 _* S8 d9 r0 I$ ?4 f# b* f- <div id="app">& r, X4 K: Y; s
- <select v-model="selected" name="fruit">5 l# {; T" d2 Q9 r5 X
- <option value="">选择一个网站</option>
+ Q3 O( q2 d* }( W+ g - <option value="www.runoob.com">Runoob</option>
0 ?; e2 n- }7 e5 ?! T - <option value="www.google.com">Google</option>1 A1 ?6 i6 h2 ]' X* w, x
- </select>
% h. X6 g( K2 M7 a/ Y0 ` -
9 m" F# \$ c O) |- | - <div id="output">
0 T5 Z6 W( D8 H$ |" e - 选择的网站是: {{selected}}& a; i. z9 p) d
- </div>: b' i7 R# D9 u( R6 x
- </div>
, P E+ V8 q) C. i3 B - 2 s9 b. ?5 A, h/ j/ A6 {1 v9 @) J: a
- <script>
$ b: y/ v( U' m `+ G4 U; Q- ? - new Vue({
. L }7 K% ~" V4 G! v9 t - el: '#app',
, U( z- P5 N: N2 `! S( Q - data: {
" |3 m# E, {) k" `) [$ U, ?- T! K - selected: '' - A4 R9 F# |4 v
- }
; z3 n5 z+ ?' i7 w* d" @, g - }): o r$ {/ E9 B; R3 L& W
- </script>
复制代码选取 cncml,输出效果如下所示:
修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
- <!-- 在 "change" 而不是 "input" 事件中更新 -->
: D' [6 \0 J6 Q+ m - <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 Z( |. q) m# l+ W2 q
- el: '#app',5 a) z, H% z1 r7 S( H
- data: {
, Q1 x, g, Q4 `+ H( @: f - checked: false,! G: `( w% S5 |
- checkedNames: [],1 j+ l; ~5 P7 Y' U2 E1 N4 b3 c
- checkedArr: ["Runoob", "Taobao", "Google"]& r6 S" }( j- A. p
- },
# }7 M/ |; h9 t - methods: {, U/ a3 F+ W' k1 A l
- changeAllChecked: function() {1 i+ d: e4 p& I. A, s5 J! F# `
- if (this.checked) {9 K, x. Q/ ]& F e
- this.checkedNames = this.checkedArr
9 t+ B1 U1 e2 T9 @- c7 ~ - } else {0 ^9 I; ]; _4 ~9 a& ~7 i' I' C
- this.checkedNames = []; I4 Q8 f2 s* a/ ]$ I u0 |
- }
7 v, `* o* ~; j0 U. y - }
, q1 i8 F7 Z B! S: X - },
% B5 }2 e3 w# a. p' ]( `+ U) r - watch: {" n* n% }, D* y' N
- "checkedNames": function() {
. W) ?: W! A6 N - if (this.checkedNames.length == this.checkedArr.length) {
: r' W0 T% a' Q1 Z0 s$ i$ l - this.checked = true
, K |3 y6 T5 f' V - } else {
1 S8 W7 h0 z+ U2 q6 P* | - this.checked = false- Z6 {, u7 v3 t# m6 L9 u7 }0 `7 V
- }
! |" f7 {* \0 Z8 A - }* s4 i6 @ V/ R, t" U1 Z' \4 P
- }
, g" f- J/ }6 D1 g8 [ - })
复制代码
- M' F& \: r! q) l1 e7 I3 p9 c e# O. G
4 W3 u1 C1 {& O3 ] Q5 t4 N' e5 e" L* @7 @
: K" W1 s7 U, U9 R, l
: } W+ q; w5 w6 @+ k
7 a# `* |9 T; H6 X5 W+ q: c) R
1 A! s l& {3 @/ Q, ?& B
| 欢迎光临 cncml手绘网 (http://bbs.cncml.com/) |
Powered by Discuz! X3.2 |