cncml手绘网

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

作者: admin    时间: 2018-7-4 11:22
标题: Vue.js 表单
这节我们为大家介绍 Vue.js 表单上的应用。
你可以用 v-model 指令在表单控件元素上创建双向数据绑定。
v-model 会根据控件类型自动选取正确的方法来更新元素。
输入框
实例中演示了 input 和 textarea 元素中使用 v-model 实现双向数据绑定:
* q" U2 H9 ?# t+ \: t0 t
  1. <div id="app">
    ; d1 ~8 _) L8 L1 \& D! v
  2.   <p>input 元素:</p>
    / ~( P$ @( ?: T! `  \. y
  3.   <input v-model="message" placeholder="编辑我……">
    : B$ v' ^! s- D; ?) u+ }% d
  4.   <p>消息是: {{ message }}</p>' b( Q* b0 C: f% C! c) m
  5.     7 S9 `% F6 ~! k3 K6 b
  6.   <p>textarea 元素:</p>
    # r4 \  x3 L2 f% F. @. D
  7.   <p style="white-space: pre">{{ message2 }}</p>0 p, c. ?5 o: l8 }! K' C4 e6 J
  8.   <textarea v-model="message2" placeholder="多行文本输入……"></textarea>
    + _* {) a, L+ N
  9. </div>+ _5 S- i1 I. Y- o* a8 B

  10. 6 ^/ f3 ~$ z0 X# A: E
  11. <script>4 y: N! s* m) I& |0 ]; U9 E
  12. new Vue({
    6 m0 R6 Z3 t$ R, d6 {& K6 D3 G
  13.   el: '#app',  C. y( g- Y1 j6 f
  14.   data: {# O: p/ w1 H& C( u6 _. ~( P7 ~* n
  15.     message: 'Runoob',
    4 k' I( X( \  N$ \- K
  16.     message2: '菜鸟教程\r\nhttp://www.runoob.com'
    0 [' I& ]- o6 l6 Z- X/ Y% H
  17.   }$ Q0 Q( N0 E8 P" l8 f7 z( C
  18. })% |* O1 A8 a* s0 U2 c6 M  O3 [
  19. </script>
复制代码
复选框
复选框如果是一个为逻辑值,如果是多个则绑定到同一个数组:
复选框
以下实例中演示了复选框的双向数据绑定:
: d+ h/ ?0 V5 ]1 }, w6 c: h1 T$ ^
  1. <div id="app">
    + D5 D# G' I+ @: N$ G/ S$ }% N
  2.   <p>单个复选框:</p>' r; W0 y2 x6 K( Q0 m0 J* F
  3.   <input type="checkbox" id="checkbox" v-model="checked">
    9 A% n7 b! ~6 Z4 q
  4.   <label for="checkbox">{{ checked }}</label>
    , C0 Y# D& T* x8 v4 D
  5.    
    * L- D1 X. q% q! Z
  6.   <p>多个复选框:</p>
    / a  l8 z, B' F3 z  }( `5 Q2 e
  7.   <input type="checkbox" id="runoob" value="Runoob" v-model="checkedNames">4 h$ f( f" j! A; O! [
  8.   <label for="runoob">Runoob</label>
    ) S/ p1 }" x- ^5 _5 X% T
  9.   <input type="checkbox" id="google" value="Google" v-model="checkedNames">
    , X7 c- }$ w! Z$ Z/ o4 b4 {  K6 \
  10.   <label for="google">Google</label>1 w8 p+ |2 v6 a' J
  11.   <input type="checkbox" id="taobao" value="Taobao" v-model="checkedNames">
    1 F' U9 _+ o, [' e  j
  12.   <label for="taobao">taobao</label>
    3 P# d" ]/ P$ m, o$ a+ n5 B9 t
  13.   <br>
    $ Q  c. ?$ Q  l1 ?) Z5 i1 V5 l) Z
  14.   <span>选择的值为: {{ checkedNames }}</span>) f0 O6 ~1 y2 `1 K
  15. </div>; w8 f% ]7 [' Z7 F( j# `/ j
  16. - Y  U; ]" ~1 k, y) J; F
  17. <script>
    6 j6 d2 l/ q( T8 B! `
  18. new Vue({; c# ?7 }# h0 o9 A$ _# E" C& J8 q* P
  19.   el: '#app',
    / ~0 ]% y, J2 Y
  20.   data: {6 M; n0 e7 G# f
  21.     checked : false,
      Y7 u: o2 z$ F) k9 I
  22.     checkedNames: []
    & j& K' V1 c# {7 K
  23.   }
    ' C5 K8 K- z' Z! Y
  24. })
    & P$ D4 H/ v" q$ G$ d. `
  25. </script>
复制代码
实例中勾选复选框效果如下所示:
单选按钮
以下实例中演示了单选按钮的双向数据绑定:
单选按钮; J) C# D. B* T# B, U! k
  1. <div id="app">% X  a/ r! U2 t# w- b, X
  2.   <input type="radio" id="runoob" value="Runoob" v-model="picked">' q! f+ ?: S& G+ L/ _
  3.   <label for="runoob">Runoob</label>3 ]4 _* i' ?1 a/ u* I
  4.   <br>  X3 e5 u2 u2 W
  5.   <input type="radio" id="google" value="Google" v-model="picked">
    6 D+ i  W) [( P5 c$ I# [2 D$ x
  6.   <label for="google">Google</label>
    3 x9 p: X( r+ m" ?, {( ?* [  Y
  7.   <br>; J# y) f+ k2 }) s
  8.   <span>选中值为: {{ picked }}</span>. F  L. \' k9 O' d& q1 B4 F
  9. </div>
    % ]! V1 U% K' z$ C/ @% {

  10. / C9 \0 X2 ^8 E/ s! o# M
  11. <script>! V  O/ U; B" s0 `1 ^, Y( K+ ?1 N
  12. new Vue({
    7 k" m, N& o& T+ f
  13.   el: '#app',; S3 o, p  f) h4 O* O
  14.   data: {# i/ D  j) t7 @
  15.     picked : 'Runoob'
    % @4 w+ a  G' Q8 d7 H9 M, F$ j( g3 D
  16.   }
    ; `/ }. Z; ^* B' s/ m! Q2 C
  17. })  p) q8 a) u: G# ^
  18. </script>
复制代码
选中后,效果如下图所示:
select 列表
以下实例中演示了下拉列表的双向数据绑定:
select
5 C; r' _' Z* T& G' i4 o
  1. <div id="app">
    ; p0 q; T$ _& H: O6 J
  2.   <select v-model="selected" name="fruit">) v& K! g7 r! W3 j; U  q
  3.     <option value="">选择一个网站</option>
    + K4 A9 w2 |1 F
  4.     <option value="www.runoob.com">Runoob</option>% z& R9 }) Z/ q1 G; P$ T+ p2 {
  5.     <option value="www.google.com">Google</option>( f3 O3 m  f4 b" P( L: ^3 P! ^/ s' v" g
  6.   </select>
    . W# d( V1 f& q' H# m

  7. : I# H! Z( p) Y6 u1 R
  8.   <div id="output">
    ; @8 [" v7 i7 n( i8 p3 `& X1 Z
  9.       选择的网站是: {{selected}}# \4 c3 B# r2 V! {0 ^4 D
  10.   </div>, {# k) g3 }1 P. S. v8 |/ A
  11. </div>
    . ?8 x6 t4 W) {+ R: D0 M: J

  12. 5 n, K* |& U3 v3 z$ O  c+ [
  13. <script>
    % X# a6 B- i& ^* }( d
  14. new Vue({
    " F' A8 {9 T, f8 C9 L4 I  v
  15.   el: '#app',$ }7 `9 \) N& A% V
  16.   data: {6 V) }3 k3 v$ i6 P2 d# J1 o  }1 K5 D
  17.     selected: '' ) R- q6 L& e4 V, W. W
  18.   }- i/ l3 w' N" @  V
  19. })
    2 k( z. g! r- ~: s' t
  20. </script>
复制代码
选取 cncml,输出效果如下所示:
修饰符.lazy
在默认情况下, v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:
  1. <!-- 在 "change" 而不是 "input" 事件中更新 -->
      u! S, t8 k4 e. 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({
    7 r' g0 B: M1 P+ Q3 J
  2.     el: '#app',
    1 s3 N8 v0 T' M
  3.     data: {4 k% x8 u9 }, _) o- a6 X: e
  4.         checked: false,
    9 l2 }8 m- @) s8 D& \0 ^: h
  5.         checkedNames: [],/ T% S- P1 L; @2 E4 F; b' c1 y
  6.         checkedArr: ["Runoob", "Taobao", "Google"]. @% ^9 ]% j/ e9 ^
  7.     },
    ' U8 v0 W2 M/ Y: @, m' E2 F9 u- f
  8.     methods: {. H  `' d* `. u" ]4 a
  9.         changeAllChecked: function() {
    / W+ y" z  B" v; \6 X  i
  10.             if (this.checked) {5 ?+ ]. N) j$ b, w
  11.                 this.checkedNames = this.checkedArr
    6 b) a1 V1 V. a0 L3 G6 k
  12.             } else {2 \4 c5 ?# z; M# \. E
  13.                 this.checkedNames = [], B7 d4 R8 c  Q
  14.             }
    : q5 m5 E  n1 x: B
  15.         }
    5 ^" u+ K0 L4 E
  16.     },
    " e) s7 M/ s9 J; [
  17.     watch: {* W$ X- c) ^; o1 g- ~  N" G8 w
  18.         "checkedNames": function() {6 `, j- ^* {) f) B/ [. a$ C- A
  19.             if (this.checkedNames.length == this.checkedArr.length) {
    0 ^' P7 x3 X1 Q, s# [0 U, y
  20.                 this.checked = true& b; K+ ^9 c  |$ F$ @! W: Y7 q
  21.             } else {9 _2 \- y0 q0 P2 U9 `, W6 x
  22.                 this.checked = false
    . b+ W9 [! G3 q# A' }
  23.             }
    ( Y1 q3 s2 E( d: Z0 q7 r
  24.         }
    ! B' x2 q6 w% R
  25.     }
    ) m8 I( K+ O" i, |4 W
  26. })
复制代码

( c! U  u" g5 D9 L3 c4 @4 [
  H* {/ B" u- S! p/ r0 k
! Q( [6 \9 u0 v3 T2 N
" j' R4 Q0 m1 H% @& K- W3 o
) W. ~' G: q! e3 y# ?, {% V. }! g; {7 e! ]; A: T

, C8 L( h: ^% k$ l
* U  [3 f; M! d0 t* u0 ^% H




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