input框名称校验防抖,且去除异步时出现的加载环

遇到一个input名称效验的功能,于是想起了之前注册账号的时候会默认提示该名称已存在,于是想复现这个功能

1.首先定义一个带返回的节流函数,该函数可以写在页面中,如果复用的比较多的话也可以封装成全局方法

const  debounce = function (func, wait) {
  let timer;
  return function (that) {
    let context = that; 
    let args = arguments; 
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(context, args);
    }, wait);
  };
}

2.将判断名称是否重复的方法封装以下,校验规则通过callback返回值来判定表单效验规则

 

  // 判断名称是否重复
        nameCheck(rule, value1, callback) {
//因为我这有编辑所以加了个判断value1是否有值且通过id判断是否是在编辑操作
          if(value1 && !this.form.materialId) {
            this.getCheckNameApi().then(
          (value) => {
//value接收api返回的信息后判断是否重复,重复了则返回后端的报错信息
            if(value != 'ok' ) {
              return callback(value)
          }else {
            return callback()
          }}   
         )
          } else {
            return callback()
          }

        
       
      },
        // 判断名称是否重复
        getCheckNameApi() {
         return  new Promise((resolve) => {
//checkName是验证名称是否重复的api接口
          checkName({
            kitchenArea: this.form.kitchenArea,
            materialName: this.form.materialName
          }).then((res) => {
//接口返回的msg判断信息通过reslove出去
     
            resolve(res.msg)
          })
         })
        },

 3.在想要校验的输入框中填写效验规则

 <Form
        ref="formValidate"
        :model="form"
        :rules="ruleValidate"
        :label-width="120"
      >
        <FormItem
          label="食材名称:"
          prop="materialName"
        >
          <Input
          ></Input>
        </FormItem>
</Form>  
ruleValidate: {

              materialName: [{ required: true, message: '食材名称不能为空', trigger: 'blur',},
//在此将刚写好的校验规则写上去,
              { validator:  debounce(this.nameCheck,500) , trigger: 'change' }],

}

5.发现异步触发input框后面会显示加载环,感觉影响用户体验,于是找到加载环的class类名将其隐藏

/deep/ .ivu-icon-ios-loading:before{
  display: none;
}

6.就此一个input框名称校验防抖,且去除异步时出现的加载环的效果就出来了

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值