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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
3 Z9 I2 X: H, Z, r( R% ?: S
  1. <div id="app">/ b; e4 g3 I( u/ h& j( ~
  2.   <p>input 元素:</p>* y4 W: \  f0 f' V6 Z+ t
  3.   <input v-model="message" placeholder="编辑我……">, M& u6 x7 D/ D( e8 E; o) \( M3 i
  4.   <p>消息是: {{ message }}</p>
    ; n* G: r# y, r# B
  5.     # n  o3 g3 B8 ]- l2 H0 r1 g& }
  6.   <p>textarea 元素:</p>% [  Q) N& A" U  d
  7.   <p style="white-space: pre">{{ message2 }}</p>
      X6 S. }, e- f
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>* e. W% a. L( ~% d$ O$ a. o
  9. </div>  U8 c8 h+ r' R3 E. W' M# r7 I

  10. 2 p3 y- R  u3 B$ w) Z8 B& Q
  11. <script>
    ! W( |& b6 f- E* m3 {0 `0 y
  12. new Vue({$ u+ ^3 J6 J3 L+ f( Z* e, {$ Y0 V
  13.   el: '#app',
    4 F- F3 o6 O& c1 V- t
  14.   data: {1 N* a! L3 |1 y" \
  15.     message: 'Runoob',
    1 j& U. ~0 l$ V; g' K
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    " y' f, n* o) T' l- |2 Y& ^
  17.   }
    3 L# A: W! t" D; c2 c, N
  18. })
    8 L3 ]8 l. K5 d3 y. S
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

2 M: I2 x7 h" M2 @, o+ X
  1. <div id="app">
    3 S5 y' A% Y  v' M- s  ~
  2.   <p>单个复选框:</p>
    " `9 w( {) Q; s  F
  3.   <input type="checkbox" id="checkbox" v-model="checked">& G0 ^( u) j$ y: t+ R+ y" _
  4.   <label for="checkbox">{{ checked }}</label>7 \) x7 W& I9 f" ]* o$ o- T) J
  5.    
    / `: e* u: B- P, k# U
  6.   <p>多个复选框:</p>
    # w( ~2 U- _: F  s! H
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    + t. t9 d* U& c/ P& ^8 r
  8.   <label for="runoob">Runoob</label>/ ^- x# K" _: t
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    " E  H: \. i" i1 i7 `( t3 q. a
  10.   <label for="google">Google</label>
    , K  r" ~$ s/ s' {, O
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    & V" d" D+ z+ K1 `, |
  12.   <label for="taobao">taobao</label>; o4 @; K# |- f8 A0 U
  13.   <br>
    + U3 W* X. Q8 y0 K1 h
  14.   <span>选择的值为: {{ checkedNames }}</span>* G' v; b" e5 Q7 z9 \: g4 b2 l2 [
  15. </div>
    3 j' g9 p* R8 s1 I7 A# Z! C: }) y
  16. 6 d6 s  z3 ^) p( J, B" D
  17. <script>$ L3 R; Y8 H5 ?
  18. new Vue({
    : j  Z; g+ s. z1 K6 s6 o
  19.   el: '#app',
    9 h. J0 C3 z& X8 U
  20.   data: {
    % I- P9 U" X9 W7 s
  21.     checked : false,  H$ V4 X  R' p" I) }' g
  22.     checkedNames: []
    5 y$ L: q. w' O2 g
  23.   }
    $ y4 @+ R" p+ K. _3 b+ o7 z6 E
  24. })
    2 c  Q, l* P4 W, U5 [' p- Y
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮; d6 W, q2 r- |& \/ L
  1. <div id="app">
    / d  M* j6 [, |
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    7 m/ S$ [& i$ |
  3.   <label for="runoob">Runoob</label>4 a9 x/ f6 J0 x
  4.   <br>+ A3 o' z1 \0 I' c: O# h0 Z
  5.   <input type="radio" id="google" value="Google" v-model="picked">0 A$ `3 u: i( U  n
  6.   <label for="google">Google</label>! p1 a0 }! U/ L, U0 m1 M
  7.   <br>
    ! a% Y& _0 ?% B! @$ S8 f' c! X
  8.   <span>选中值为: {{ picked }}</span>9 D  [* v0 |' }4 {* m7 R# O2 e
  9. </div>! ~$ J4 v$ ^$ {7 a' k4 N2 I
  10. ( R. n" n9 o; Y6 M/ A
  11. <script>8 z5 e7 I& m9 s, C' b& V, r$ P
  12. new Vue({7 r" r1 d# Q. ?$ W) f8 Z9 u
  13.   el: '#app',
    * L# |, S+ j" w7 U, d0 W
  14.   data: {
    3 z1 A1 H6 u/ J% b1 T$ w+ Y
  15.     picked : 'Runoob'
    + R- Z7 I9 n0 h8 v" E
  16.   }8 x# s6 k: l- Z+ y+ [1 x' ]
  17. })% U+ X1 g3 j. a6 _- f
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select; P0 w) w4 w' S2 b5 B+ U2 B
  1. <div id="app">6 H; R. u0 E4 Y+ I( \$ a
  2.   <select v-model="selected" name="fruit">
    & X1 {. y# w4 I9 G$ D3 L: ~
  3.     <option value="">选择一个网站</option>- Q$ l+ N- M5 @8 H, C4 b
  4.     <option value="www.runoob.com">Runoob</option>7 M& U% J7 S) m- I- {4 z
  5.     <option value="www.google.com">Google</option>! D% ^0 r/ O$ o3 z9 c: [
  6.   </select>5 E4 D8 O( ]8 {: e: V% P3 ?/ _! `

  7. 1 j& a8 q8 b1 k
  8.   <div id="output">8 j7 x  ]7 i/ o
  9.       选择的网站是: {{selected}}* l1 S* \) Y* u7 ?5 ?7 }! r' _
  10.   </div>4 Z. o( n; e& g( h; R
  11. </div>
    8 q6 l: X: d6 r" |

  12. # d7 w' n5 i* k% u" ]  b, D
  13. <script># F0 s5 K6 ]6 ~, z3 P
  14. new Vue({
    4 C* x7 v) u9 F' u* I1 W/ t
  15.   el: '#app',, `/ ?( x) |5 p4 G; U
  16.   data: {
    2 e9 z0 m2 M. `3 E1 M
  17.     selected: '' $ d* ]6 p8 }% k% `% M
  18.   }5 X, N( `) W4 f5 E% K
  19. })
    # O: D% {) a& ~2 w0 x& L& T
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    ! O7 _$ b$ g# E" }+ |- K' N
  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 k0 Q! W" _4 E
  2.     el: '#app',
    % ^6 @- {7 l7 g' E; C7 f8 s% M* B
  3.     data: {* t1 n, p( j( V3 }) S
  4.         checked: false,; N; Y" R& Z$ p- [+ p
  5.         checkedNames: [],3 |9 j$ B" k+ u" C
  6.         checkedArr: ["Runoob", "Taobao", "Google"]
    9 K2 N8 s( V. F( `0 @! ]5 b
  7.     },
    ; h8 n6 w3 c8 Y+ k# p
  8.     methods: {
    ( C. P. z' w( O1 v0 [+ Y; f
  9.         changeAllChecked: function() {9 R7 T6 ^6 c5 q" k6 z* R4 w' B4 L
  10.             if (this.checked) {
    : m0 {* l3 l: |/ ]' P. ^+ J
  11.                 this.checkedNames = this.checkedArr
    0 l! e! O0 }3 Z1 q' i
  12.             } else {  G4 h8 q) X: p5 S% a: a
  13.                 this.checkedNames = []
    - l; d" s" [" J$ q# \
  14.             }3 E2 p. |9 {. n3 f8 p- u
  15.         }
    $ T1 `4 M1 _5 h3 N: S- a+ Y
  16.     },
    : ^2 u- D3 m) ~2 Q3 x7 }: I8 H) B
  17.     watch: {
    4 K, h5 d" W5 W1 r  k- \/ c
  18.         "checkedNames": function() {
    ; q0 j. I5 z7 A+ F, \: m
  19.             if (this.checkedNames.length == this.checkedArr.length) {& V7 o  q7 Y9 M2 R  {- M- h
  20.                 this.checked = true4 m" W1 p# K& U% }* i; H6 N
  21.             } else {
    9 z8 b$ C, o4 M
  22.                 this.checked = false
    * ]6 v) `; P  M  X% D
  23.             }
    ; R9 n) g# V8 a8 I! T4 O
  24.         }
    5 E; H+ H% {# g& g. j4 Z0 z  ]1 }& ?
  25.     }% B' o6 j7 Z& d9 l
  26. })
复制代码

! Z6 z# S' r/ t9 n$ d
1 I: @4 M+ r) n  r7 e: V" y0 Z; x2 _; \/ [% x

- a9 ~7 g5 @7 `( l0 S+ u7 ^0 q4 L' a! r
& y# L  Y; q4 }' K- I% v% N
4 X& C( w! z; q; t# k" {  i
) E( S# V7 A3 q0 k1 |% j& f6 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 23:17 , Processed in 0.055926 second(s), 23 queries .

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