当前位置:   article > 正文

Element plus Form 表单验证执行两次,问题原因及解决办法_element ui 循环表单校验进行两次

element ui 循环表单校验进行两次

 问题原因

  1. this.$refs['form'].validate((res)=>{
  2. console.log(res);
  3. if(res){
  4. let elCrtUserid = localStorage.getItem('username')
  5. let elCrtUsername = localStorage.getItem('nickname')
  6. let elDptName = JSON.stringify(this.form.elDptName)
  7. addList({...this.form,elCrtUserid,elCrtUsername,elDptName,elDptId}).then(() => {
  8. this.$modal.msgSuccess('添加成功')
  9. this.open = false
  10. this.getList()
  11. })
  12. }
  13. })

逻辑为利用回调函数获取验证结果,判断表单验证结果为true后,执行请求

结果请求没发送成功,于是我打印表单验证结果,结果控制台打印了两次,分别为truefalse

看了下源码,找到了问题所在

 问题根本原因为源码中try catch,加上我写的回调函数里面的请求报错,于是有了上面的true,false两次打印

解决办法

  1. this.$refs['form'].validate().then(res=>{
  2. console.log(res)
  3. let elCrtUserid = localStorage.getItem('username')
  4. let elCrtUsername = localStorage.getItem('nickname')
  5. let elDptName = JSON.stringify(this.form.elDptName)
  6. addList({...this.form,elCrtUserid,elCrtUsername,elDptName,elDptId}).then(() => {
  7. this.$modal.msgSuccess('添加成功')
  8. this.open = false
  9. this.getList()
  10. })
  11. }).catch(e=>{
  12. console.log(e);
  13. //页面滚动到没通过验证的字段
  14. this.$refs.form.scrollToField(Object.keys(e)[0])
  15. })

因为validate函数支持回调函数形式,也会返回一个Promise对象,而且catch还会返回没有通过的验证字段

总结

回调函数形式--->表单验证通过,函数执行报错  会执行两次回调函数,分别返回true、false

Promise形式---->表单验证通过,函数执行报错  执行then函数 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/112894
推荐阅读
相关标签
  

闽ICP备14008679号