您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16079|回复: 0
打印 上一主题 下一主题

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
9 m/ L) x  u: l* g7 V! e' ^
  1. <div id="app">
    + ~' |; c# A; `* ?3 D8 X
  2.   <p>input 元素:</p>8 p1 _: F# a5 @* |
  3.   <input v-model="message" placeholder="编辑我……">
    1 [$ ^1 z1 m9 }1 z9 v1 g, j2 h
  4.   <p>消息是: {{ message }}</p>
    2 K2 O& u- u+ g4 x5 m6 v) n. d/ N4 R
  5.    
    ! N$ ~2 K$ y7 _! L0 d/ K' V
  6.   <p>textarea 元素:</p>- q- I9 P" }8 `1 m
  7.   <p style="white-space: pre">{{ message2 }}</p>9 T1 C  Z# t5 |4 k
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    1 e. t1 i& A" \' U
  9. </div>
    0 w% [# p5 ?5 X( I
  10. 8 s) e$ z4 ~+ W
  11. <script>
    * k& Z7 V0 U, ]* B. G
  12. new Vue({
    2 h: D1 `# C& b3 a, ~
  13.   el: '#app',: K% M# M" B: n0 f" d- a
  14.   data: {
    $ ?8 w( X; R( t. E- }5 O: k$ J
  15.     message: 'Runoob',5 V# R$ ?" [% \0 W6 V1 ^
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'; p$ }' \, P6 Y# d7 C# n
  17.   }
    , g. {. w5 h0 ~' @- }) [2 D
  18. })8 A' W; H- h& D! [8 G
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
' P8 p, B! _. r  f  Y
  1. <div id="app">; D- B8 e7 Z) D6 ~. D3 e! r7 @& _
  2.   <p>单个复选框:</p>
    - E" N9 x; Y& D- k: r6 Y: F; K
  3.   <input type="checkbox" id="checkbox" v-model="checked">( k! D/ M2 W2 ~# h2 A$ ~9 r
  4.   <label for="checkbox">{{ checked }}</label>
    * S" A) G7 w: _2 s  ~( o" v
  5.     % H8 A3 Z. G1 d
  6.   <p>多个复选框:</p>+ T2 Q) Z9 W* T- E1 f
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    ) s: I7 W9 j: y  o* d
  8.   <label for="runoob">Runoob</label>) |% l9 W$ W# L; Y) n
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    % Q; O( o( \8 H+ s# Z+ U
  10.   <label for="google">Google</label>! F# W; ~8 L/ a& h( q
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">+ g0 {& c- x% G/ S" A
  12.   <label for="taobao">taobao</label>( Z4 x' U* z  K9 X( O
  13.   <br>% i$ @# Y0 D6 K+ `! h* C. k: n* z) ]
  14.   <span>选择的值为: {{ checkedNames }}</span>) x9 ^! J! a9 \$ K8 [
  15. </div>
    7 G! F/ k! e; J8 L3 {5 B

  16. 3 {3 n; Z# U+ P' L6 D
  17. <script>
    - }( ~6 u* |) f+ _" {1 P
  18. new Vue({
    9 P6 L# x8 @2 J: m) {' ?/ q2 D
  19.   el: '#app',0 L  e& r! p# }3 B$ P$ {
  20.   data: {
    5 C- E1 b$ x* @
  21.     checked : false,
    8 a0 x. V7 f/ F: V' L+ A# B
  22.     checkedNames: []7 f" H2 i: K4 E7 o
  23.   }5 _) @! V2 @; g* v- }1 F5 b! z
  24. })) c- T! ]8 X5 j1 S$ M
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
3 J$ q2 b8 [# _1 j0 l+ Q# s4 A; \
  1. <div id="app">0 R9 }% Z. v+ O- f: j
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    9 i& q$ p6 j' u2 j) f) u4 L
  3.   <label for="runoob">Runoob</label>1 N' k- N3 i4 z" l% w. q
  4.   <br>
    4 \' X% {- F7 o2 \- E
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    4 R( E1 t( ]" w# x( S# B! p
  6.   <label for="google">Google</label>6 t& l5 X  c" h; B. B
  7.   <br>
    0 E+ U( h* u2 F# Q# x
  8.   <span>选中值为: {{ picked }}</span>
    - J' r+ J6 h9 B
  9. </div>2 p8 }6 M* t. h- {( M

  10. & Q* T3 X! k! @2 b0 e! T% _
  11. <script>, u: o- l, q3 p& V) I  K
  12. new Vue({
    3 D5 k0 Q5 F( }( _
  13.   el: '#app',
    ) L% j- A, i( M' I1 U
  14.   data: {
    - ?  c, K1 o" @
  15.     picked : 'Runoob'
    + \$ G% o: T( M
  16.   }1 O+ Z$ v4 T6 F, T3 V9 i8 G
  17. })
    0 t' ]: ~. [- r0 o. l, Y
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select" ]5 H$ A5 v9 C2 s# l' S
  1. <div id="app"># e1 Q6 Q4 o; I& ~' Y& K! C
  2.   <select v-model="selected" name="fruit">* Z/ O; \- k( w0 [
  3.     <option value="">选择一个网站</option>
    7 d4 m) S  D9 c
  4.     <option value="www.runoob.com">Runoob</option>. L1 k+ m, O9 v0 Z( V
  5.     <option value="www.google.com">Google</option>
    $ R2 u% a, W3 y! u! x2 S/ j/ k
  6.   </select>7 F1 W7 `" }% Y0 v/ t; x

  7. 9 N- S1 g( N) S, `3 h
  8.   <div id="output">
    0 X" k1 j2 x  e$ M, y. n
  9.       选择的网站是: {{selected}}# ?3 Z. j% J1 w6 v% V
  10.   </div>. V1 N  h# |5 Q$ l- I& K" J' [5 M, B2 R7 Z
  11. </div>
    ) e5 E: G2 w$ T! q) Y. t1 v
  12. ! y1 O+ L5 }7 |+ v
  13. <script>
    + |' ^. j8 G' n! a/ T" n  R$ g
  14. new Vue({6 O" y/ Y) d/ H2 ~
  15.   el: '#app',% ^  i; @& D' m* X% e! R
  16.   data: {  p* \) U" P6 k0 f" f# `
  17.     selected: '' : h) J! w+ S4 C/ A0 s/ r, T
  18.   }+ @4 r: A. c! e" g/ f
  19. })5 s# n  R$ C& S
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->% j. k9 p3 m, D  l9 k
  2. <input v-model.lazy="msg" >
复制代码
.number
如果想自动将用户的输入值转为 Number 类型(如果原值的转换结果为 NaN 则返回原值),可以添加一个修饰符 number 给 v-model 来处理输入值:
  1. <input v-model.number="age" type="number">
复制代码
这通常很有用,因为在 type="number" 时 HTML 中输入的值也总是会返回字符串类型。
.trim
如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入:
  1. <input v-model.trim="msg">
复制代码
全选与取消全选
  1. new Vue({2 l0 U$ g* U1 s1 b* Q7 Y1 u3 I
  2.     el: '#app',
    5 h- P* g7 W( N% L- Q& \
  3.     data: {
    ) Y& U, T, f, U$ {
  4.         checked: false,; Z: O6 R8 s2 ~
  5.         checkedNames: [],; O/ M# J# S, ~2 W9 ^8 c
  6.         checkedArr: ["Runoob", "Taobao", "Google"]8 P, \- N$ K; e; x" |  e( a
  7.     },0 L* h5 F$ l7 z+ f. R" a7 i8 V
  8.     methods: {' p# ?7 V9 u& m* Y
  9.         changeAllChecked: function() {( c1 h. |3 W, h4 X- V1 m
  10.             if (this.checked) {; {3 [8 a( a. x$ P+ ~
  11.                 this.checkedNames = this.checkedArr
    0 P0 O5 Z" A* m9 a; L' F
  12.             } else {; N8 u; U* N8 B. }8 |: ?
  13.                 this.checkedNames = []  i7 |& Z  N/ |8 t# b  O
  14.             }
    ; m$ k$ R* _: b0 Z  E
  15.         }0 x5 d3 v! Q' F" G0 o; T
  16.     },
    , ~5 i$ A, E, n, e
  17.     watch: {
    9 E! y8 X# d  L( e0 ?
  18.         "checkedNames": function() {) q% m$ M+ f. p5 b$ {, n* d' U9 H
  19.             if (this.checkedNames.length == this.checkedArr.length) {: R* K1 b+ `/ }
  20.                 this.checked = true: M/ ?) O/ H" k; v" [- j
  21.             } else {: n9 a" o8 [. [4 U
  22.                 this.checked = false1 G% R( T& d/ }5 w9 \
  23.             }& ?# N9 w& }8 b1 L+ z5 k
  24.         }2 u" V! K; g2 Y# ~& D2 G8 p& p
  25.     }7 S1 R, W/ i1 {) l
  26. })
复制代码
8 B0 ~7 p! h  b- L8 ]9 q1 q
% B" e# H6 c. g* D
% W0 ?: v, d  R) B6 K/ q( e) N

* K; S7 S% ?7 q) ?$ g
" W) a( U1 Z: X6 e4 A" W2 I1 t% r6 x% e2 W1 t# z
) B, S" D$ _( b

# N3 V6 d3 {5 ]; t9 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 15:15 , Processed in 0.081096 second(s), 23 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!