elementui多个form表单同时校验

394 阅读1分钟

使用场景:一个页面由多个form表单组成,提交的时候要统一校验必填信息,统一提交

一、使用Promise.all统一处理表单验证

// 校验表单一  
let dispatchValidate = new Promise((resolve, reject) => {  
    this.$refs.leftform.validate((valid) => {  
        if (valid) {  
            // 表单一校验通过后其他逻辑判断  
            this.checkEqu();  
            resolve();  
        } else {  
            return false;  
        }  
    });  
});  

// 校验表单二  
let formValidate = new Promise((resolve, reject) => {  
    this.$refs.rightform.validate((valid) => {  
        if (valid) {  
            resolve();  
        } else {  
            reject(new Error('错误'));  
            return false;  
        }  
    });  
});  

// Promise.all统一处理  
Promise.all([dispatchValidate, formValidate])  
.then(() => {  
    // 调用接口  
    this.confirmPay();  
    this.$message.success('验证通过')  
}).catch(err => {  
    this.$message.error('验证失败');  
})

new Promise分别对两个表单校验,最后用Promise.all统一处理,再做后续操作

二、优化上面的代码,封装一个表单验证

utils/index.js

/**
  * 表单验证函数
  * @param {*} formName 表单名称
  * @returns {Promise}
  */
 export const validateForm = (formName) => {//注意js文件中拿不到refs,所以需要外部直接传一个ref对象进来
  return new Promise((resolve, reject) => {
    formName.validate((valid) => {//this.$refs[formName].validate返回的是一个promise
      if (valid) {
        resolve();
      } else {
        reject(new Error('错误'));
        return false;
      }
    })
  })
}

form.vue

<script>
import { messageTips, validateForm } from "@/utils/index"
export default{
    submitForm() 
        //表单验证
        Promise.all([validateForm(this.$refs.leftform), validateForm(this.$refs.rightform)])
            .then(() => {
                console.log("表单验证成功");
                //验证成功后在此处发请求
                this.addProWorkItem(params).then(res => {
                    if (res.code == 20000 || res.code == 200) {
                        messageTips("success", "接口请求成功");
                        this.closeDialog();
                    } else {
                        console.log(">>>ERR", res.msg);
                        messageTips("error", "接口请求失败");
                    }

                }).catch(err => {
                    console.log(">>>ERR", err);
                    messageTips("error", "接口请求失败");
                })
            })
            .catch((err) => {
                console.log("表单验证失败");
            })
    }
}
</script>

参考链接1:blog.csdn.net/qq_37485170…

参考链接2:blog.csdn.net/weixin_7140…