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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
: J& M0 p# Z% H* n' {
  1. <div id="app">5 Y! `9 Q' m2 W7 b" O  F) \3 d
  2.   <p>input 元素:</p>/ ^' q) r% L* d
  3.   <input v-model="message" placeholder="编辑我……">$ {  }7 x/ V5 N' u7 n; p" U6 [$ V
  4.   <p>消息是: {{ message }}</p>
    ( i# Z/ x7 E5 |0 E0 F
  5.    
    . y1 L' ^. g* B4 `# ^
  6.   <p>textarea 元素:</p>* I( f2 L2 a+ k
  7.   <p style="white-space: pre">{{ message2 }}</p>
    9 ?4 y. z; g3 z; d$ p; r
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    5 W/ c1 I4 v8 ?& j: u0 H
  9. </div>
    " S/ @1 P6 y) U- ?2 [3 L
  10. 7 v% M) n3 J# j6 h7 x# d  I8 y
  11. <script>8 m' i* }' r# c! ^, L
  12. new Vue({: i) V. D3 n! v5 S* `% J
  13.   el: '#app',, z; U8 ~3 g2 e% a4 i5 D+ c- T% m
  14.   data: {
    % V' n% _! r3 R$ B- l4 @
  15.     message: 'Runoob',
    ' w. i: N" I9 L
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'' ^2 \& p8 v  t4 g$ |2 h
  17.   }$ p/ t( ?, T3 g  d' J
  18. })( g- `$ b9 U( a4 b; s
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

7 h! ], Q0 f  y" `) d
  1. <div id="app">5 f6 g6 Z( `, H; F' }- R- s
  2.   <p>单个复选框:</p>
    : c5 t5 y* g/ m2 V
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    8 j' ]3 Y7 [" x9 ~1 A
  4.   <label for="checkbox">{{ checked }}</label>
    , D/ {2 _4 T4 i
  5.    
    , N  R2 U* e( \6 k. k3 H; t& g
  6.   <p>多个复选框:</p>
    ; F% {5 @* ?; c( c
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">: [! V& R) R* O' D4 K
  8.   <label for="runoob">Runoob</label>1 r: `$ u' U; U$ [
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    3 I; r- L& w8 x6 @/ y& {
  10.   <label for="google">Google</label>
    * J7 d; Y$ t0 c$ J" q5 C  }
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">, x: D; i2 e, O8 A/ Y0 h
  12.   <label for="taobao">taobao</label>9 d* H: q* n3 O1 \8 N
  13.   <br>
    # d* t# [; y8 U1 J2 x/ k( _* _
  14.   <span>选择的值为: {{ checkedNames }}</span>
    3 H) S1 |+ W# [) T& r
  15. </div>. p' w6 e* _- k4 j" w. P. Q
  16. ' L& n" L: a. a  ?: j
  17. <script>0 R* g5 t9 @3 |4 K+ g
  18. new Vue({% @& i8 m9 W, y" s% l' b  F9 `
  19.   el: '#app',
    . v% i0 ]; K  t
  20.   data: {* H" @& \5 i& f9 l$ ?
  21.     checked : false,$ e8 f5 {- U0 M
  22.     checkedNames: []
    . h, m% r! o5 U( O
  23.   }  y; T6 U  c3 K/ o
  24. })
      q9 q$ f9 e" P, {
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
; f' I, j' c/ K" ^# P
  1. <div id="app">
    $ U. H8 A! z% f; Y. I9 i& @
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">- n2 c% n5 O+ n
  3.   <label for="runoob">Runoob</label>9 d6 [: d4 V, m# t
  4.   <br>5 |" z) \- q) ?3 H! ?1 }
  5.   <input type="radio" id="google" value="Google" v-model="picked">" B$ d( ?$ L( T0 s" J& Z
  6.   <label for="google">Google</label>
    ) y' @5 O' j0 H: N' U
  7.   <br>
    9 }' g9 R0 t  [
  8.   <span>选中值为: {{ picked }}</span>4 G, l9 a. n( h+ a  Z1 P  b& M
  9. </div>
    ( H$ @5 D$ L6 t! [4 G

  10. ' q) F7 I. K8 k' u6 ?
  11. <script>) \7 O$ G7 v" J/ d& A0 w9 K
  12. new Vue({
    7 m( |9 w- ]+ a1 U' C
  13.   el: '#app',2 J6 z% S/ h/ V4 Z: N
  14.   data: {
    ' o# W) v- X1 E& b0 r6 f' b
  15.     picked : 'Runoob'
    ( K6 O3 H# h6 `
  16.   }; W& `8 C  M& p) }" d( `
  17. })
    8 o9 P7 G$ _2 k. z1 ~. V+ d
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
' F" v# v# s2 K
  1. <div id="app">
    2 i, z0 ^5 S/ M& E& H/ w
  2.   <select v-model="selected" name="fruit">) A: z% V$ C$ N; o1 K) b) l% t
  3.     <option value="">选择一个网站</option>
    4 U7 n! j1 j' y2 E5 E
  4.     <option value="www.runoob.com">Runoob</option>* i9 u$ t3 Q; B; [9 v% t: w$ N; C
  5.     <option value="www.google.com">Google</option>3 z) G& b( ^9 q& P( ~  r! ]" p
  6.   </select>: f. a+ |, o. `  ]
  7. * ]2 D- U0 U8 |7 G' W& ~, r( N/ {
  8.   <div id="output">
    - p# ?. M& b: O* ~, f
  9.       选择的网站是: {{selected}}
    , g' F9 g; t4 F6 C& j
  10.   </div>
    ; G8 h) c5 p( z4 @6 V; J6 K
  11. </div>( {. |  ~1 y; j: X7 U  ?# z; Z
  12. : h( `3 s+ v% ]# ^9 L" S* D
  13. <script>
    & i6 ^2 ~) u# ^% e' P' C& V
  14. new Vue({
    % W+ [4 L* t1 H; m$ g% i1 Z' J8 {
  15.   el: '#app',
    + ~! S- l* D4 i/ e: u
  16.   data: {
    # X1 t$ p% |% M3 H& q
  17.     selected: ''
    0 m& i( ?. x: H6 b: \0 r. O
  18.   }
    ( F( b+ H0 K! R/ L+ F
  19. })1 \- y6 T' x8 M7 X
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    " r( ]% H" [& {% }
  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({
    " |! @" x  E1 e4 ^; w* Q
  2.     el: '#app',
    / b0 z5 s5 k7 K9 `2 n* d# A. }
  3.     data: {
    8 B: Y6 W/ R) B) m3 y
  4.         checked: false,
    ) [- B- o5 ?7 `$ d: J) L* l: _% o
  5.         checkedNames: [],0 b( [* T) }5 K+ a/ _7 ?" z
  6.         checkedArr: ["Runoob", "Taobao", "Google"]+ V  X( R5 t( S" m+ i2 D; b1 ~
  7.     },
    - U) K- E# B% Y8 c$ T5 m/ |2 n
  8.     methods: {
    6 E+ ^. P7 U5 t, {% _. U# `6 @/ r2 D
  9.         changeAllChecked: function() {
    ) F. a& q, H+ O( w5 ~: P
  10.             if (this.checked) {1 H" {  g/ Y, V% _# ?  \& U1 ]
  11.                 this.checkedNames = this.checkedArr. `" @8 J2 a6 P+ u  T$ g, S  D3 x7 \
  12.             } else {6 S* p  Q! {" J! B% ^' g2 t
  13.                 this.checkedNames = []2 p3 Q0 A# c6 N" U2 n
  14.             }9 V4 ]0 ^$ `2 t+ o" Q
  15.         }
    # q+ Z) K9 \4 H$ W. D8 j- y8 l
  16.     },
    / k9 f2 `4 W( P6 v* C5 p
  17.     watch: {  w5 Q* [( b6 _
  18.         "checkedNames": function() {! [9 K- d# j3 [6 ?3 g: ~
  19.             if (this.checkedNames.length == this.checkedArr.length) {+ ^$ m& {* ]# D) }" w3 P
  20.                 this.checked = true' k3 T. Q) H( H
  21.             } else {/ R6 |5 X1 c- {) ]. F% d2 h
  22.                 this.checked = false. s, Q' H* t0 J$ K( V
  23.             }! G( x7 \0 l, |+ P3 {( S# q
  24.         }
    ) T" I0 ]; Y0 ]
  25.     }
    * D$ [1 c9 }, Z) M( N( \- k
  26. })
复制代码

5 a4 o  P' H* Z- t$ v6 @$ [; q% z4 `; a( u! e; g6 R# B* v1 b, f$ G# i# P! H
( ^0 c+ O. v3 G4 b! E5 _
, u% c& a9 I. _1 b. P6 j# \
. r5 X9 p* W& V

3 b9 P6 U9 I) c' x' h& q
: J5 j9 E4 K1 B/ V' H% \
$ s! x* K# R5 `, o: F: ]( D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-8-4 10:10 , Processed in 0.063959 second(s), 22 queries .

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