|
这节我们为大家介绍 Vue.js 表单上的应用。 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。 v-model 会根据控件类型自动选取正确的方法来更新元素。 输入框实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定: 8 D$ v' Q( t' C! ]6 e+ R: k) `& ~$ Y
- <div id="app">
/ Q& y1 @4 c" P3 ~ - <p>input 元素:</p>
1 n/ R+ |5 I: W# O/ R! @2 \ - <input v-model="message" placeholder="编辑我……">
/ v% W. e) M. F) S - <p>消息是: {{ message }}</p>
6 ^/ v" m m0 N: q. y+ |% { -
! f) T4 p2 p# K/ H- a4 n - <p>textarea 元素:</p>$ c6 w& a% b7 U( ?
- <p style="white-space: pre">{{ message2 }}</p>
9 d" Z+ F4 ]4 R4 I l* } - <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
K2 _( w0 R/ g5 Z - </div>9 \/ Y) h* l) F2 t3 n! C" a& j
- 9 G) @1 q$ Q# R7 u" m/ q
- <script>* x l) `: h1 F8 A# m# ~
- new Vue({3 s/ e$ Q- z6 C5 S/ \( t. t
- el: '#app',, Y" J6 G4 I0 N0 ~2 ~) P3 t
- data: {' w7 ]: U e ?, k5 K# I7 f
- message: 'Runoob',: R; M5 L: ^7 K. s
- message2: '菜鸟教程\r\nhttp://www.runoob.com'
/ @6 e, ]7 ^& G& T* t - }6 `( N1 Z0 s" F
- })
% Q$ b, v, G* Y& G" t* B( o - </script>
复制代码 复选框复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组: 复选框以下实例中演示了复选框的双向数据绑定: 8 K9 X- x& Y* o
- <div id="app">
. H" ~6 a, u6 | D - <p>单个复选框:</p>' ~9 _5 |, g" W. _
- <input type="checkbox" id="checkbox" v-model="checked">" }! `+ W( V) `" K' B+ |. `
- <label for="checkbox">{{ checked }}</label>
1 M" L2 V, V" e. V# f; `- n" Z -
% } A8 M8 T7 B' o$ d& f - <p>多个复选框:</p>
( @- M9 ^ l9 C, P+ a2 _ - <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">2 N6 r) u6 i/ w) _, t, T
- <label for="runoob">Runoob</label>
# ?4 E+ M3 J. O: |/ ~5 b - <input type="checkbox" id="google" value="Google" v-model="checkedNames">
?9 o4 z8 A6 o - <label for="google">Google</label>: G; P; x7 w; \
- <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">8 f, M9 [; E+ z$ y4 A6 c G) |
- <label for="taobao">taobao</label>: y5 z4 Q, A8 @2 g9 O7 f
- <br>
* P6 {, H3 U9 g/ M4 ?0 t - <span>选择的值为: {{ checkedNames }}</span>6 R. j- |( @3 P; x
- </div>
' J% x, f, h. S6 A& I2 U* C -
8 ^ u! T5 h: X - <script>+ ^+ v' E1 c# t' G* x( F$ s
- new Vue({0 H7 K0 E) t* I" m6 [; p
- el: '#app',
: ]. K! f$ [+ r) K6 r. a - data: {) b. A8 c' m4 x
- checked : false,
, q0 ~4 `# m% t: Q# T" `6 s8 K - checkedNames: []" P3 _5 C; V( R- ]
- }7 F8 B. S* y4 r+ r* R J2 k0 q5 F4 Z5 s. L
- })
$ J% e' g9 P, \# i! N( v7 |6 E - </script>
复制代码实例中勾选复选框效果如下所示: 单选按钮以下实例中演示了单选按钮的双向数据绑定: 单选按钮
& Z3 J I3 Q5 p. Y5 Q- <div id="app">
6 z A3 r4 s | - <input type="radio" id="runoob" value="Runoob" v-model="picked">
' ]$ D; n8 ]2 s- @; {2 w, Z - <label for="runoob">Runoob</label>
9 p3 `; z3 O u - <br>$ b$ u5 _# O3 A$ n& M) U# R# B1 [/ k
- <input type="radio" id="google" value="Google" v-model="picked">) H+ H. a& g( E6 p
- <label for="google">Google</label>
: a/ h& e! k6 f8 S2 j - <br>8 |7 z1 j& J* L. o4 s! `
- <span>选中值为: {{ picked }}</span>
( K) N; U( Z1 J - </div>
' G5 s2 p4 Q8 A S+ i5 H% W -
" N$ }) a( ^" c8 W! k - <script>
% f+ d1 F" N, B: `" Z4 P# _# c - new Vue({
( @/ R" x2 V" g9 k& U' i - el: '#app',9 d& ^2 Z1 x& S+ r3 z( k9 `
- data: {3 O. @/ x+ S% U2 [' T
- picked : 'Runoob'
+ m2 y; W0 V7 A# B9 t: ]9 c7 y { - }( v- }6 j0 R/ q+ J- f
- })9 ^9 J$ y6 ?! L- b6 |
- </script>
复制代码选中后,效果如下图所示: select 列表以下实例中演示了下拉列表的双向数据绑定: select
t0 o4 U& k8 }3 F8 {: K- <div id="app">
2 W) n- u7 k# R* S; O; G - <select v-model="selected" name="fruit">
9 L' X( G/ G5 \! T( F3 S - <option value="">选择一个网站</option>6 q0 q1 G; r; B6 s( q4 v' m
- <option value="www.runoob.com">Runoob</option>! W4 P6 H5 |* r$ i$ L! F Q
- <option value="www.google.com">Google</option>
7 Y7 s0 }, I8 I D. V# \ - </select>1 [' d" i6 e' Q( q8 P. U
-
; F' d e. c" F0 g, n% t9 u3 N - <div id="output">
' Q. f: N! c9 G6 C) K) S - 选择的网站是: {{selected}}+ Q7 F- O6 P+ m4 a2 s" {
- </div>
- k9 D5 G$ R% o, W+ V% ? - </div>
) W4 s5 ]( i2 T+ X/ A! a- { - ( \+ i& P: b) z( S$ I9 y( P+ W
- <script>
: G0 S9 T% u% J( S7 _ - new Vue({, e+ r& a$ {1 m! r( F
- el: '#app',) O9 w2 d$ C. t4 v9 m. q
- data: {5 i/ g1 x$ j& `8 L" X; Y( S; G
- selected: '' 6 T) X! `' `$ g3 {4 s' c
- }' y3 Z3 S6 ]. W+ C2 \" r1 u1 _( g
- })7 ?9 h9 Z& ~. r2 P& } d' w
- </script>
复制代码选取 cncml,输出效果如下所示: 修饰符.lazy在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步: - <!-- 在 "change" 而不是 "input" 事件中更新 -->
! J+ ]* @2 a( v0 j p5 P - <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({' l7 a" _- W; @ l4 E, X
- el: '#app',! J& e- [- ~. F& }
- data: {$ t9 ^. K- f7 Z D( r6 J
- checked: false,
1 X _. u1 g/ L0 d) B - checkedNames: [],
8 z- o. Y5 o; o7 ` J7 k - checkedArr: ["Runoob", "Taobao", "Google"]
5 j' i+ K' `" X- r - },
. m* |; l0 P: U% W) u- R( e - methods: {
9 u" h% U8 g2 ?+ O& O0 s3 ~ - changeAllChecked: function() {
3 m: n" Z% {6 N - if (this.checked) {
2 h* G1 X3 `2 f$ P- E4 N - this.checkedNames = this.checkedArr) a% Y9 ?, B, E5 H" C: Q, [
- } else {
8 G- d7 C" c2 {3 r0 x - this.checkedNames = []' {/ z+ E: U/ E g
- }
/ ~, Q9 {1 s' R8 v/ v3 ? - }
I) b! V& ^: X/ L6 d& h6 S - },
& b, y5 B- @9 o4 o* ^ - watch: {2 |& a) r* I7 r0 K m' {; V
- "checkedNames": function() {
. G9 |" h7 M5 F4 T5 \- a - if (this.checkedNames.length == this.checkedArr.length) {+ A, J& m& ?5 Z
- this.checked = true# r- y4 {: w; g3 {+ |- c
- } else {
: D/ t1 [4 y8 G% X/ Q q! p% E - this.checked = false. z6 f' }" R- Q8 B& D
- }
6 ~, ?1 A6 k5 x( d1 V/ N+ R - }) O: Q2 W3 u9 M, y& q; q
- }- N& y+ d) m( K) w. r
- })
复制代码 4 r! D, i; [& L5 k5 U
4 }3 V/ n7 N1 h! J* p) ?+ O& T
% f8 V! F/ |% j ] Y! b w, ~1 V. ^% b4 P+ S8 |* j+ N
$ Q M8 i5 h7 H% H/ Q! `
) Y. F2 a# Z! Q7 C8 O, T( x+ K. g+ B/ `. [ c5 Z0 u; }
5 @3 R3 x4 }& e6 X E. A. ` |