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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[Vue.js] Vue.js 表单

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:22:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
5 E6 F  t2 H; z$ s; ]
  1. <div id="app">9 x& z8 D3 T* C- f$ V, x% P
  2.   <p>input 元素:</p>
    5 H0 m- s  k- Y# C+ b' s
  3.   <input v-model="message" placeholder="编辑我……">
    , t: w2 A* S. n- c; p
  4.   <p>消息是: {{ message }}</p>, U4 j& o: u7 B" J8 R  j  Q
  5.     0 S/ W6 v7 N. N- w2 i9 Q' @
  6.   <p>textarea 元素:</p>0 t- S- G1 a5 E$ ~0 X
  7.   <p style="white-space: pre">{{ message2 }}</p># ~3 L% u) Q' o' H
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>  Y! c+ B& T; ]. M. {& Y3 c# z
  9. </div>" Z% O. g. M8 D, b0 l

  10. 6 Q6 P8 [$ h$ p- ?
  11. <script>
    7 T5 Q* I: U( L
  12. new Vue({9 z. t: z$ F" u
  13.   el: '#app',% c0 h/ k* j9 f' b
  14.   data: {) \0 Z& W4 E5 W. l6 I4 b
  15.     message: 'Runoob',
      e4 `2 e- G0 S: h5 Q' M3 @1 l
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    8 {) H( o6 F6 _! |6 \& o
  17.   }
      [+ n- Z$ L) ~5 Z: ]7 L2 y  F' ?
  18. })2 s8 U9 t2 j* J) d
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
0 E: J$ H  G( N" W2 G' ^* P) }
  1. <div id="app">1 I, O& U' {& \8 _& D( V
  2.   <p>单个复选框:</p>
    & e4 w3 W) O" i! B0 B( u' m0 V
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    ! p4 @" W3 b( `( f6 D  N5 j
  4.   <label for="checkbox">{{ checked }}</label>$ \* s! \2 ]; T7 L9 M) d( T
  5.     ) G" }6 _4 p6 X8 A3 u) W  |1 U" J3 o
  6.   <p>多个复选框:</p>3 j% w# H% Q; n& j3 A  q* O
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    9 N2 W8 V7 K4 h8 h
  8.   <label for="runoob">Runoob</label>
    ) |. k/ Q1 E2 z
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    9 a5 D: ?( L! @: V4 {. X
  10.   <label for="google">Google</label>
    5 s$ F6 Y7 H+ l
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">2 \# W( i, _3 U2 M
  12.   <label for="taobao">taobao</label>
    2 P2 a, t- @4 K& L' z
  13.   <br>
    " X7 _, u# Q% ?! h% G% `
  14.   <span>选择的值为: {{ checkedNames }}</span>4 L$ l- v( ~: `7 q) _5 x6 t
  15. </div>
    1 H8 _& x& [1 `/ v9 ?0 L6 t

  16. 6 L, E# [3 b% \" b- R+ M3 y
  17. <script>
    7 E, t) n, P: j
  18. new Vue({  x4 H7 c9 X! S& Y* S; O% M
  19.   el: '#app',, W7 H3 Z( P  y" T% X: q" n, M
  20.   data: {
    : P0 P; p% C$ b7 Y2 l5 ~
  21.     checked : false,
    , j1 n  b/ M( p0 n
  22.     checkedNames: []' u* s% O3 {' x- L' H
  23.   }
    + R+ r- O$ {" B2 o1 t) {; Y
  24. })
    . n3 {6 H9 E* x2 A/ t2 z
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
$ {  F8 I& D* h* M' A
  1. <div id="app">) E: z$ L7 O& B9 y- v
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">0 ~3 z5 f$ s' k
  3.   <label for="runoob">Runoob</label>- Q1 `# n2 N: D7 |/ V
  4.   <br>4 k$ _' m  T9 ?2 A( s
  5.   <input type="radio" id="google" value="Google" v-model="picked">  D/ _) R5 ?+ B/ Y3 z
  6.   <label for="google">Google</label>
    7 N5 t. k. \$ w4 Q; @. g
  7.   <br>
    5 ~+ u( c7 i9 ~- y+ `. i& [! d7 u- k
  8.   <span>选中值为: {{ picked }}</span>
    + g$ n' W; {; I, Z
  9. </div>* |2 x$ a; ^7 s+ _

  10. 7 ^; ^( [' t! @2 D# s6 `( ^
  11. <script>
    9 T* a! L+ [) ~7 @; f* j
  12. new Vue({
    * `1 V* ~7 @- r8 |" v  M9 J
  13.   el: '#app',
    ) r9 r& e4 p% U3 q8 E1 p
  14.   data: {6 o$ N5 z1 F3 P& B
  15.     picked : 'Runoob'
    0 T7 b: N* K0 J$ t- W. j
  16.   }5 U4 ?( C. m+ ~
  17. })
    9 j/ O# \+ j5 j$ a
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select! @1 s* _$ \% o& P! n
  1. <div id="app">6 b; h8 x2 }8 P. `9 W6 @
  2.   <select v-model="selected" name="fruit">7 k) X8 C0 y9 \2 i
  3.     <option value="">选择一个网站</option>
    3 d8 q9 a, O# o0 ~2 O2 H
  4.     <option value="www.runoob.com">Runoob</option>& n$ e& d4 C( c
  5.     <option value="www.google.com">Google</option>9 \! [, }8 o: C% }% A# C
  6.   </select>, a; D4 h/ I2 q
  7. , f+ D6 G+ H7 S3 c/ m: u  l/ D* k# \
  8.   <div id="output">' Q% R3 V" |4 O3 |+ q) o1 e
  9.       选择的网站是: {{selected}}# X; C! H( G$ x3 O' z9 l+ {
  10.   </div>
    0 v& P, r. y) Y7 [' g. b
  11. </div>( l9 z. {+ _3 v. Z4 \8 Y; U

  12. 9 k6 B  h' G+ Z9 C2 _1 Z
  13. <script>
    - ~! x! ^6 ]8 H- ~3 i, W4 b
  14. new Vue({
    - |' i+ [7 ]6 J9 Q+ g
  15.   el: '#app',
    2 u' I" n8 v5 @( R' e# c
  16.   data: {
    5 B0 Q! G! g! J1 z. M
  17.     selected: '' + Z: g" Y& \; k
  18.   }) c$ m' T# d4 \) J
  19. })1 n# E7 |& N& W" D  |& W
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->, v5 T4 j) {, B  j9 ?7 M/ _
  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({7 q$ e! Q) Z; y( J+ d
  2.     el: '#app',
    * h- X3 q/ @) ?- D/ J! N% U
  3.     data: {
    2 ~; L  t5 |, s1 ^
  4.         checked: false,
    . d  S; f, e9 S% Q- p
  5.         checkedNames: [],
      B. W+ L+ V; K9 c
  6.         checkedArr: ["Runoob", "Taobao", "Google"]4 O+ k8 f6 A5 E0 @# {# B  d3 J2 Y
  7.     },& r( b5 }# A7 y2 O- G
  8.     methods: {
    ( u6 I3 N- j# S, q
  9.         changeAllChecked: function() {  ~, o, c9 g6 T
  10.             if (this.checked) {
    ! c! F/ j7 ~. z, |
  11.                 this.checkedNames = this.checkedArr7 H: T# a9 l- p* V7 }* ]8 u
  12.             } else {
    " D4 s3 ], W+ W9 n
  13.                 this.checkedNames = []
    / D. J+ }( W, D) L
  14.             }" L5 {- j5 G% i# Y% E" g
  15.         }
    " C" |, i. \* V4 t
  16.     },8 ]  g% q/ p; S; d1 E1 o
  17.     watch: {! x3 ]& m) N: A" C. V
  18.         "checkedNames": function() {
    9 e" f& G( j  B
  19.             if (this.checkedNames.length == this.checkedArr.length) {
      N! J0 S( z' `0 L' V
  20.                 this.checked = true8 v! h2 L+ F( U) U9 v1 J! j
  21.             } else {8 {' }9 j$ M/ j% U4 ]
  22.                 this.checked = false
    2 t; r) T2 {, Y
  23.             }
    : g% g$ r8 B9 v& }
  24.         }
    & o. D+ V$ _" M" v& i% P& L
  25.     }+ W3 f( b9 r7 C) ^
  26. })
复制代码
% c7 }. V! B) a/ `4 g; Z
7 j! d# m6 ]2 a+ J! d) F) t
, I! X  O( H: u, L, }5 i4 E
# \2 S/ {2 `1 e( G
# F- g* |- u$ v4 B- h) Y# E
4 w6 H; J8 R& n! }( z9 O. R2 T' e
+ t$ _2 s& W: M% ^1 I8 a- I
$ z) v$ \/ i. J, O) B/ z* S0 u  d1 @/ D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-12-22 20:57 , Processed in 0.161893 second(s), 25 queries .

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