cncml手绘网

标题: Vue.js 表单 [打印本页]

作者: admin    时间: 2018-7-4 11:22
标题: Vue.js 表单
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
: r" \3 j7 N& [. q/ I0 a
  1. <div id="app">
    & ^5 S' F; S& ^' \0 \4 G7 n* N
  2.   <p>input 元素:</p>
    ; Y* Q9 ^+ B# y# o" ]
  3.   <input v-model="message" placeholder="编辑我……">8 G/ N9 A  Z- S
  4.   <p>消息是: {{ message }}</p>- k/ i, t; Q8 a1 l$ S) Q$ M/ `) d
  5.     3 v& y+ @9 h( {; y5 N5 P0 r
  6.   <p>textarea 元素:</p>
    9 N: {  }$ c: b$ }
  7.   <p style="white-space: pre">{{ message2 }}</p>% S/ q1 i9 c: t2 U& v9 h. ^
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>( }5 }9 ~3 [7 y% C
  9. </div>
    6 U1 l' k1 k+ ~9 {5 `# z
  10. 0 ?5 |  a, C& D1 Y0 S
  11. <script>
    0 W0 c* \, W9 ^% r- F! x  T
  12. new Vue({
    0 y9 F# S7 _1 L: e: R
  13.   el: '#app',1 d$ t: [' Z  c9 b2 e
  14.   data: {  r# n. ^* Y- f1 a( K4 O
  15.     message: 'Runoob',
    ! v$ B/ O3 ], |. s; N
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    : R1 X+ ?/ s) F  e: b' a! W
  17.   }1 ]* z/ h7 S; I9 Y- ^  }
  18. })" g7 i; V8 X' y& \
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:

) U+ F! V0 g- @0 }
  1. <div id="app">
      `5 g0 ~; d8 _
  2.   <p>单个复选框:</p>( l& ^( V3 g5 L9 S( M* K. e+ \9 v
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    . d, T5 m) n( ^$ K; v7 `
  4.   <label for="checkbox">{{ checked }}</label>
    1 M  E1 Q; h2 [! p7 u1 x* @
  5.     6 h- x5 K* Y( X( n
  6.   <p>多个复选框:</p>
    3 ?* @3 X" h/ L( H, }
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">
    " }+ p, t8 a) o% L* I& c5 U2 q
  8.   <label for="runoob">Runoob</label>' H1 u/ Q3 K  C+ j1 K8 \- y( T
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    4 ^! z6 ^- L6 q6 `3 n
  10.   <label for="google">Google</label>
    / u% e! R4 B/ ^$ K6 a8 [/ u' ~) K5 z& t
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">0 H+ \+ C9 f" O8 y) w; ]1 A! Q) O
  12.   <label for="taobao">taobao</label>1 ^. t2 k+ z$ J3 ], h# g% V- m
  13.   <br>
    , |0 p9 n9 [" c7 F6 @" m6 D& d7 H& J! c/ I
  14.   <span>选择的值为: {{ checkedNames }}</span>
    : ]/ D1 M# p+ Z# k. K6 Z1 M
  15. </div>
    8 V  \6 M- z1 L* H

  16. - D' F; ~6 i" p" p
  17. <script>
    7 j* R3 T4 y+ p2 V
  18. new Vue({
    0 H! Y% G: o# u1 J2 Y9 R& B" E
  19.   el: '#app',
    8 ]* `% X) u1 `; r$ T" j  X" Y
  20.   data: {
    - d% E% h% O- i8 A# c  |- s9 `; Z
  21.     checked : false,3 C% x, u. t! M3 s9 ~
  22.     checkedNames: []
    9 ^" d' H/ L' G. I
  23.   }
    5 Y4 D: x# R0 I- k3 B; R8 K* F4 l
  24. })+ ^* j$ F+ n6 r: [% L2 Y6 E7 q7 L  E
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮
- P: [; d* N- n5 l% o
  1. <div id="app">
    * [& Y( S0 l' b0 u2 x" _
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">
    * f/ |. w: h! r
  3.   <label for="runoob">Runoob</label>0 c# [$ x% h- }- c* _
  4.   <br>
    3 k1 g  J  [. P% v/ d0 N
  5.   <input type="radio" id="google" value="Google" v-model="picked">) {; q6 c1 N5 l$ G4 E
  6.   <label for="google">Google</label>) q+ a5 T/ B/ [/ A
  7.   <br>0 }5 m$ t' n+ T# B. I
  8.   <span>选中值为: {{ picked }}</span>
    9 V9 k1 A6 C' e
  9. </div>. b4 ?! ^' Z, C9 w. q2 ^7 V* B
  10. ; H6 f! o& J' w, D( w
  11. <script>
    4 _( j( \# `% D+ ]8 P
  12. new Vue({' J+ d9 T2 M0 g* j
  13.   el: '#app',$ H7 V9 ~+ H: c4 E
  14.   data: {/ w  A9 Q4 Y* o, S) F) K
  15.     picked : 'Runoob'- p5 O$ ^3 o2 }( g4 G! N' K/ F+ B
  16.   }' F! x5 X6 o( g( K( O5 a) ?
  17. }). {6 O4 b& P9 V/ ?0 n: Q
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
% W, g' \: p, x( m% T6 ~2 C
  1. <div id="app">; m* v5 G' s" z) `0 z7 S5 p
  2.   <select v-model="selected" name="fruit">& K# u- r; A- }+ Y. f
  3.     <option value="">选择一个网站</option>
    - x  E6 i& \' b
  4.     <option value="www.runoob.com">Runoob</option>
    $ L8 q' N. x! e) p! s, w/ A* B
  5.     <option value="www.google.com">Google</option>1 k' v' |7 ]& c+ N% Y
  6.   </select>  i6 }) ^$ D( L

  7. ! `2 H' P! b( a* z4 k* @
  8.   <div id="output">
    6 g/ _0 _5 k$ k3 M8 C& z* U
  9.       选择的网站是: {{selected}}
    $ k: C5 P( W# l5 j# v9 ]
  10.   </div>
    2 }: H$ P) K* g9 U
  11. </div>1 S9 a& y2 V/ W

  12. : V" l+ ]8 ~, w
  13. <script>* s6 e  ?! U  o3 m4 b
  14. new Vue({% W" V( B; d, R+ E/ e+ a( ?& R
  15.   el: '#app',
    ( R$ a3 y4 E8 y; }/ \- Z. Q% V2 L
  16.   data: {
    1 Y3 n: W! F: Q! _, D, n
  17.     selected: '' : B% ~: s( a8 _! a
  18.   }
      i* ]. \+ _% A
  19. })9 X/ N# e- \' P( \" d# x
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
    . H* L. T% X) k; _1 b, `
  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({
    / ~# D% V( s# T6 L6 s* g
  2.     el: '#app',# f! P7 J/ g: @6 \: V
  3.     data: {
    + ^% l# {% Y0 Q8 E
  4.         checked: false,  V9 ?% i+ S$ w: U
  5.         checkedNames: [],/ w/ Z; s  E, ~/ t$ r- i
  6.         checkedArr: ["Runoob", "Taobao", "Google"]' u/ J6 R8 T( P
  7.     },
    : }3 d! M# e" D  ~
  8.     methods: {
    - x2 L' l4 ^6 E( O' _; P1 }+ M3 l
  9.         changeAllChecked: function() {2 _& S; {4 o" |1 ]% }
  10.             if (this.checked) {5 }- i) m9 W7 F3 v% I5 i4 d
  11.                 this.checkedNames = this.checkedArr
    . ~6 z4 C4 v) o' r
  12.             } else {
    : n) ?0 F, i( B3 K" F( B8 `1 S
  13.                 this.checkedNames = []9 N3 U* T, \$ B. }: v+ W4 Y
  14.             }& s+ r2 i1 f8 r4 E: ~  @
  15.         }
    ( T7 W5 }; ~4 A( k5 d0 w! x
  16.     },
    ! [2 D' R: l6 P
  17.     watch: {4 W& `6 I+ Z8 k" t0 e; x) e: J0 Q- h
  18.         "checkedNames": function() {  c" ~( v8 y# R$ z. @
  19.             if (this.checkedNames.length == this.checkedArr.length) {
      T: W7 `9 s( a; }8 O, m
  20.                 this.checked = true
    % A( L+ q  D+ _% M) o8 [
  21.             } else {
    7 I# ?" T# S- e
  22.                 this.checked = false8 |6 v! Z: m2 `' I
  23.             }! b& K9 k5 {- {1 J3 M
  24.         }+ t" ~; @) ]+ v5 U& p; j0 o
  25.     }0 J+ o7 y& v; P
  26. })
复制代码
5 Z/ d6 M6 ?; r, J0 J( F
8 Z5 q& D- A: n0 Q6 j
& \. o( Z8 K" P3 @

* R) {9 o" f. \+ A
/ I" N: o; J  \: V" q$ v* X
! G' G" t; i' ]" W0 K% w( [
9 ^6 p! u  X4 ~3 `$ a' h, {9 q% h8 }$ Y





欢迎光临 cncml手绘网 (http://cncml.com/) Powered by Discuz! X3.2