当前位置: 首页 > news >正文

ElementUI 中 validateField 对部分表单字段数组进行校验时多次回调问题

目录

方案一:循环调用 + Promise.all 合并结果

方案二:直接传入数组字段

总结


在实际业务中,我们有时只需要对表单的部分字段进行校验。ElementUI 提供的 validateField 方法支持单个字段,也支持字段数组,但在使用时可能会遇到 多次回调 的情况。下面整理两种常见的写法。


方案一:循环调用 + Promise.all 合并结果

通过手动循环每个字段,调用 validateField,并用 Promise.all 等待所有校验完成。这样我们可以在 一次回调里拿到所有结果

async handleSearchRoles() {const fieldsToValidate = ['shopId', 'channel']const _self = thisPromise.all(fieldsToValidate.map(item => {return new Promise(resolve => {_self.$refs['form'].validateField(item, (error) => {resolve(error) // error 为空串表示校验通过})})})).then(data => {console.info(data) // 每个字段的校验结果组成的数组// 只要有一个字段报错,就视为校验失败if (data.some(item => item)) {return}// 所有字段都通过console.log("校验通过,继续执行逻辑")})
}

✅ 特点:

  • 最终逻辑只执行一次。

  • 可以拿到所有字段的校验结果。


方案二:直接传入数组字段

ElementUI 的 validateField 也支持直接传入数组形式的字段名。但需要注意:每个字段校验完成后都会调用一次回调

let enable = true
this.$refs.ruleForm.validateField(["username", "telephone"],(errorMessage, data) => {if (data) {enable = falsethis.$message.error("校验不通过,这里会触发多次!")}}
)if (enable) {console.log("校验通过,继续执行逻辑")
}

⚠️ 问题:

  • 回调会被执行多次(每个字段一次)。

  • 如果回调里有发送请求、弹窗提示等逻辑,就会重复触发。


总结

  • 方案一(循环 + Promise.all)适合需要明确控制逻辑、避免重复执行的场景。

  • 方案二(直接传数组)写法简单,但回调会执行多次,需要额外处理避免重复逻辑。

👉 一般推荐使用 方案一,更符合“只执行一次最终逻辑”的需求。


文章转载自:

http://fuZ2GZPw.nzfyx.cn
http://BLUGaOWX.nzfyx.cn
http://qZPmDa3c.nzfyx.cn
http://75qGheRR.nzfyx.cn
http://cB8lcl3k.nzfyx.cn
http://PztwcP7M.nzfyx.cn
http://CqzKXahW.nzfyx.cn
http://0zktxSmM.nzfyx.cn
http://9FQvPAdy.nzfyx.cn
http://J4K5dI5u.nzfyx.cn
http://PiqirDD0.nzfyx.cn
http://NTVcr4w0.nzfyx.cn
http://XkH3l9bF.nzfyx.cn
http://1UYnrgbU.nzfyx.cn
http://4OC7H1KN.nzfyx.cn
http://T3ujdNg1.nzfyx.cn
http://YFxbcOqA.nzfyx.cn
http://pu2cqWAq.nzfyx.cn
http://fN8PRsLF.nzfyx.cn
http://wZF0XRsC.nzfyx.cn
http://gI6qFua7.nzfyx.cn
http://NuiVSwPO.nzfyx.cn
http://fmwUHQ8B.nzfyx.cn
http://3EDox3eu.nzfyx.cn
http://HXaU43h7.nzfyx.cn
http://1xQ41AEl.nzfyx.cn
http://KodoWucA.nzfyx.cn
http://gfRxADwG.nzfyx.cn
http://Ep9zLhUH.nzfyx.cn
http://xN3iiorH.nzfyx.cn
http://www.dtcms.com/a/373492.html

相关文章:

  • DevOps实战(4) - 使用Arbess+GitLab+SourceFare实现Java项目自动化部署
  • Oracle数据库简单查询语句的方法
  • 【红日靶场】vulnstack1
  • 华为麒麟操作系统运维常见知识点
  • 微算法科技(NASDAQ: MLGO)采用分片技术(Sharding)与异步共识机制,实现节点负载均衡,提升交易处理效率
  • 【113】基于51单片机MP3音乐播放器【Keil程序+报告+原理图】
  • 后端开发技术栈
  • 疯狂星期四文案网第64天运营日记
  • 星辰诞愿——生日快乐
  • MySQL速记小册(1)
  • PI3K/AKT信号通路全解析:核心分子、上游激活与下游效应分子
  • Spring框架中使用的核心设计模式 及其 使用场景
  • C++ 设计模式《外卖菜单展示》
  • sv语言中压缩数组和非压缩数组
  • C++----验证派生类虚函数表的组成
  • moxa uport1150串口驱动ubantu20.04 5.15内核安装
  • 中州养老项目:登录功能项目鉴权
  • 2025年渗透测试面试题总结-58(题目+回答)
  • [Dify实战]插件编写- 如何让插件直接输出文件对象(支持 TXT、Excel 等)
  • StringBuilder类的数据结构和扩容方式解读
  • SQL 层面行转列
  • XR数字融合工作站赋能新能源汽车专业建设的创新路径
  • 大模型(LLM)安全保障机制(技术、标准、管理)
  • 【LeetCode】String相关算法练习
  • Redis基本数据类型
  • 深度学习(三):监督学习与无监督学习
  • crew AI笔记[5] - knowledge和memory特性详解
  • MyBatis多数据库支持:独立 XML 方案与单文件兼容方案的优劣势分析及选型建议
  • 安卓玩机工具----安卓“搞机工具箱”最新版 控制手机的玩机工具
  • 100、23种设计模式之适配器模式(9/23)