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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
8 D$ v' Q( t' C! ]6 e+ R: k) `& ~$ Y
  1. <div id="app">
    / Q& y1 @4 c" P3 ~
  2.   <p>input 元素:</p>
    1 n/ R+ |5 I: W# O/ R! @2 \
  3.   <input v-model="message" placeholder="编辑我……">
    / v% W. e) M. F) S
  4.   <p>消息是: {{ message }}</p>
    6 ^/ v" m  m0 N: q. y+ |% {
  5.    
    ! f) T4 p2 p# K/ H- a4 n
  6.   <p>textarea 元素:</p>$ c6 w& a% b7 U( ?
  7.   <p style="white-space: pre">{{ message2 }}</p>
    9 d" Z+ F4 ]4 R4 I  l* }
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
      K2 _( w0 R/ g5 Z
  9. </div>9 \/ Y) h* l) F2 t3 n! C" a& j
  10. 9 G) @1 q$ Q# R7 u" m/ q
  11. <script>* x  l) `: h1 F8 A# m# ~
  12. new Vue({3 s/ e$ Q- z6 C5 S/ \( t. t
  13.   el: '#app',, Y" J6 G4 I0 N0 ~2 ~) P3 t
  14.   data: {' w7 ]: U  e  ?, k5 K# I7 f
  15.     message: 'Runoob',: R; M5 L: ^7 K. s
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    / @6 e, ]7 ^& G& T* t
  17.   }6 `( N1 Z0 s" F
  18. })
    % Q$ b, v, G* Y& G" t* B( o
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
8 K9 X- x& Y* o
  1. <div id="app">
    . H" ~6 a, u6 |  D
  2.   <p>单个复选框:</p>' ~9 _5 |, g" W. _
  3.   <input type="checkbox" id="checkbox" v-model="checked">" }! `+ W( V) `" K' B+ |. `
  4.   <label for="checkbox">{{ checked }}</label>
    1 M" L2 V, V" e. V# f; `- n" Z
  5.    
    % }  A8 M8 T7 B' o$ d& f
  6.   <p>多个复选框:</p>
    ( @- M9 ^  l9 C, P+ a2 _
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">2 N6 r) u6 i/ w) _, t, T
  8.   <label for="runoob">Runoob</label>
    # ?4 E+ M3 J. O: |/ ~5 b
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
      ?9 o4 z8 A6 o
  10.   <label for="google">Google</label>: G; P; x7 w; \
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">8 f, M9 [; E+ z$ y4 A6 c  G) |
  12.   <label for="taobao">taobao</label>: y5 z4 Q, A8 @2 g9 O7 f
  13.   <br>
    * P6 {, H3 U9 g/ M4 ?0 t
  14.   <span>选择的值为: {{ checkedNames }}</span>6 R. j- |( @3 P; x
  15. </div>
    ' J% x, f, h. S6 A& I2 U* C

  16. 8 ^  u! T5 h: X
  17. <script>+ ^+ v' E1 c# t' G* x( F$ s
  18. new Vue({0 H7 K0 E) t* I" m6 [; p
  19.   el: '#app',
    : ]. K! f$ [+ r) K6 r. a
  20.   data: {) b. A8 c' m4 x
  21.     checked : false,
    , q0 ~4 `# m% t: Q# T" `6 s8 K
  22.     checkedNames: []" P3 _5 C; V( R- ]
  23.   }7 F8 B. S* y4 r+ r* R  J2 k0 q5 F4 Z5 s. L
  24. })
    $ J% e' g9 P, \# i! N( v7 |6 E
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
& Z3 J  I3 Q5 p. Y5 Q
  1. <div id="app">
    6 z  A3 r4 s  |
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    ' ]$ D; n8 ]2 s- @; {2 w, Z
  3.   <label for="runoob">Runoob</label>
    9 p3 `; z3 O  u
  4.   <br>$ b$ u5 _# O3 A$ n& M) U# R# B1 [/ k
  5.   <input type="radio" id="google" value="Google" v-model="picked">) H+ H. a& g( E6 p
  6.   <label for="google">Google</label>
    : a/ h& e! k6 f8 S2 j
  7.   <br>8 |7 z1 j& J* L. o4 s! `
  8.   <span>选中值为: {{ picked }}</span>
    ( K) N; U( Z1 J
  9. </div>
    ' G5 s2 p4 Q8 A  S+ i5 H% W

  10. " N$ }) a( ^" c8 W! k
  11. <script>
    % f+ d1 F" N, B: `" Z4 P# _# c
  12. new Vue({
    ( @/ R" x2 V" g9 k& U' i
  13.   el: '#app',9 d& ^2 Z1 x& S+ r3 z( k9 `
  14.   data: {3 O. @/ x+ S% U2 [' T
  15.     picked : 'Runoob'
    + m2 y; W0 V7 A# B9 t: ]9 c7 y  {
  16.   }( v- }6 j0 R/ q+ J- f
  17. })9 ^9 J$ y6 ?! L- b6 |
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
  t0 o4 U& k8 }3 F8 {: K
  1. <div id="app">
    2 W) n- u7 k# R* S; O; G
  2.   <select v-model="selected" name="fruit">
    9 L' X( G/ G5 \! T( F3 S
  3.     <option value="">选择一个网站</option>6 q0 q1 G; r; B6 s( q4 v' m
  4.     <option value="www.runoob.com">Runoob</option>! W4 P6 H5 |* r$ i$ L! F  Q
  5.     <option value="www.google.com">Google</option>
    7 Y7 s0 }, I8 I  D. V# \
  6.   </select>1 [' d" i6 e' Q( q8 P. U

  7. ; F' d  e. c" F0 g, n% t9 u3 N
  8.   <div id="output">
    ' Q. f: N! c9 G6 C) K) S
  9.       选择的网站是: {{selected}}+ Q7 F- O6 P+ m4 a2 s" {
  10.   </div>
    - k9 D5 G$ R% o, W+ V% ?
  11. </div>
    ) W4 s5 ]( i2 T+ X/ A! a- {
  12. ( \+ i& P: b) z( S$ I9 y( P+ W
  13. <script>
    : G0 S9 T% u% J( S7 _
  14. new Vue({, e+ r& a$ {1 m! r( F
  15.   el: '#app',) O9 w2 d$ C. t4 v9 m. q
  16.   data: {5 i/ g1 x$ j& `8 L" X; Y( S; G
  17.     selected: '' 6 T) X! `' `$ g3 {4 s' c
  18.   }' y3 Z3 S6 ]. W+ C2 \" r1 u1 _( g
  19. })7 ?9 h9 Z& ~. r2 P& }  d' w
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    ! J+ ]* @2 a( v0 j  p5 P
  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({' l7 a" _- W; @  l4 E, X
  2.     el: '#app',! J& e- [- ~. F& }
  3.     data: {$ t9 ^. K- f7 Z  D( r6 J
  4.         checked: false,
    1 X  _. u1 g/ L0 d) B
  5.         checkedNames: [],
    8 z- o. Y5 o; o7 `  J7 k
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    5 j' i+ K' `" X- r
  7.     },
    . m* |; l0 P: U% W) u- R( e
  8.     methods: {
    9 u" h% U8 g2 ?+ O& O0 s3 ~
  9.         changeAllChecked: function() {
    3 m: n" Z% {6 N
  10.             if (this.checked) {
    2 h* G1 X3 `2 f$ P- E4 N
  11.                 this.checkedNames = this.checkedArr) a% Y9 ?, B, E5 H" C: Q, [
  12.             } else {
    8 G- d7 C" c2 {3 r0 x
  13.                 this.checkedNames = []' {/ z+ E: U/ E  g
  14.             }
    / ~, Q9 {1 s' R8 v/ v3 ?
  15.         }
      I) b! V& ^: X/ L6 d& h6 S
  16.     },
    & b, y5 B- @9 o4 o* ^
  17.     watch: {2 |& a) r* I7 r0 K  m' {; V
  18.         "checkedNames": function() {
    . G9 |" h7 M5 F4 T5 \- a
  19.             if (this.checkedNames.length == this.checkedArr.length) {+ A, J& m& ?5 Z
  20.                 this.checked = true# r- y4 {: w; g3 {+ |- c
  21.             } else {
    : D/ t1 [4 y8 G% X/ Q  q! p% E
  22.                 this.checked = false. z6 f' }" R- Q8 B& D
  23.             }
    6 ~, ?1 A6 k5 x( d1 V/ N+ R
  24.         }) O: Q2 W3 u9 M, y& q; q
  25.     }- N& y+ d) m( K) w. r
  26. })
复制代码
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. `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 18:42 , Processed in 0.076690 second(s), 23 queries .

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