gpt4 book ai didi

基于element-ui封装表单金额输入框的方法示例

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 38 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章基于element-ui封装表单金额输入框的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在日常的迭代开发中通常我们会遇到这样的场景:在一个表单中需要用户输入金额,并校验金额的格式。这个需求你一定遇到过,但是现在,我们还需要做到:当用户离开输入框(失去焦点)时,输入的内容变成了用逗号每隔 3 位分隔的数字,并展示给用户。且最后提交金额时,参数的值仍然是正常数字,不包含逗号.

基于element-ui封装表单金额输入框的方法示例

遇到这种需求,我们首先要想到「表单中的金额输入框」是常见到的功能。既然是常见的功能,我们要将它抽象封装起来,做到随时可用于任何表单中,用一行代码代替重复作业.

基于element-ui封装表单金额输入框的方法示例

像表单项一样,我们需要给组件传递 label,绑定值的 key,placeholder 用于展示在表单中;还需要传递整个 form 对象,表单的 rules 进来。另外,考虑到需要给一个遮罩层展示格式化后的金额,我们还需要传递 width 决定遮罩层宽度.

基于element-ui封装表单金额输入框的方法示例

注意我们上面的需求,当 input 框触发 blur 事件时,我们首先需要校验用户输入的内容是否为正数且可保留两位小数。这时就用到了传递进来的 rules,拿它来校验。若通过校验则展开格式化后的金额,不通过就触发 element-ui 本身的校验规则提示。注意看 @blur 触发的 blurinput 方法,用于去掉输入内容前面的 0,是否符合校验条件,最后决定是否展开格式化后的金额.

基于element-ui封装表单金额输入框的方法示例

如果没问题,通过了校验,就需要根据输入内容格式化金额。利用 computed 计算得到.

组件的设计思想大致如下:

基于element-ui封装表单金额输入框的方法示例

完整的组件代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
   },
   rules: {
    type: object,
    default : () => { },
   },
  },
  data () {
   return {
    showformatprice: false , // 是否显示遮罩
   }
  },
  computed: {
   formaterprice () {
    if (
     this .form.deceivedamount !== '' &&
     this .form.deceivedamount !== null
    ) {
     // 去掉前面的0
     const integer = this .form.deceivedamount.split( '.' )[0]
     const decimal = this .form.deceivedamount.split( '.' )[1]
      ? `.${ this .form.deceivedamount.split( '.' )[1]}`
      : ''
     return `${integer
      .tostring()
      .replace(/(?=(?!^)(\d{3})+$)/g, ',' )}${decimal}`
    } else {
     return ''
    }
   },
  },
  methods: {
   // 聚焦金额输入框
   focusinput () {
    this .showformatprice = false
    this .$refs.input.focus()
   },
   // 失焦金额输入框
   blurinput () {
    if ( this .form.deceivedamount !== '' ) {
     // 去掉前面的0
     const integer = number( this .form.deceivedamount.split( '.' )[0])
     const decimal = this .form.deceivedamount.split( '.' )[1]
      ? `.${ this .form.deceivedamount.split( '.' )[1]}`
      : ''
     this .form.deceivedamount = isnan(`${integer}${decimal}`)
      ? this .form.deceivedamount
      : `${integer}${decimal}`
     if ( typeof this .rules[ this .prop][0].pattern !== 'object' ) {
      throw `请确保 rules[${ this .prop}][0].pattern 为正则表达式`
      return
     }
     this .showformatprice = this .rules[ this .prop][0].pattern.test(
      this .form.deceivedamount,
     )
    }
   },
  },
}
</script>
 
<style lang= "less" scoped>
.price-mask {
  position: absolute;
  z-index: 2;
  top: 1px;
  left: 125px;
  background: white;
  width: 110px;
  overflow: auto;
  font-size: 13px;
}
</style>

在表单中的使用方法其实和你直接写一个 el-form-item 的效果是一样的,直接引入即可.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 使用方法:
<template lang= "pug" >
el-form(:model= "form" ref= "form" label= "180px" :label-suffix= "':'" :rules= "rules" )
   priceinput(:form.sync = "form" :width = "150" label = "金额" prop = "deceivedamount" :rules = "rules" )
</template>
 
<script>
import priceinput from '@self/components/priceinput'
data() {
  return {
   form: {
    deceivedamount: null ,
   },
   rules: {
    deceivedamount: [
     {
      pattern: /^1000000000$|^1000000000.0$|^1000000000.00$|^[+]{0,1}(\d{0,9})$|^[+]{0,1}(\d{0,9}\.\d{1,2})$/,
      message: ' 请输入 0-10亿 的正数,可保留两位小数' ,
      trigger: 'blur' ,
     },
    ],
   },
  }
}
components: {
  priceinput,
}
</script>

到此这篇关于基于element-ui封装表单金额输入框的方法示例的文章就介绍到这了,更多相关element-ui 表单金额输入框内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://juejin.cn/post/6913706130032033799 。

最后此篇关于基于element-ui封装表单金额输入框的方法示例的文章就讲到这里了,如果你想了解更多关于基于element-ui封装表单金额输入框的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com