前言
承接上回,循环表单实现了,那么怎么进行校验呢?
一、表单校验
demo都是以element组件为例的,主要是用到el-form的validate方法,如下图所示,其实该方法会返回一个promise,那么我们就可以将所有表单的validate方法的返回的promise全部执行就行了~
二、校验实现
主要的注意点就是每个表单上的ref引用唯一并且我们可获取就行了,那么就可以用for循环的表单数据的key作为ref,通过遍历原始数据,就可以拿到每一个表单的ref,最后用promise.all将每个获取所有promise的结果,决定是否进行后续逻辑就可以啦~,简要代码如下:
<el-form
:ref="`ruleForm1-${form.key}`"
class="form"
:model="form.ruleForm1"
label-width="100px"
></el-form>
<el-form
class="form"
:ref="`ruleForm2-${item.key}`"
:model="item" label-width="100px"
>
</el-form>
checkForm1() {
const checkPromise = this.ruleForm.map(v => this.$refs?.[`ruleForm1-${v.key}`]?.[0]?.validate())
return checkPromise
},
checkForm2() {
const checkPromise = this.ruleForm?.reduce((p, c) => [...p, ...c.ruleForm2], [])?.map(v => this.$refs?.[`ruleForm2-${v.key}`]?.[0]?.validate())
return checkPromise
},
confirm() {
const checkPromise = [...this.checkForm1(), ...this.checkForm2()]
Promise.all(checkPromise).then((resArr) => {
if(resArr.every(v => v)) {
this.$confirm('确定提交?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$message({
type: 'success',
message: '提交成功'
});
}).catch(() => {});
}
}).catch(() => {})
}
如上代码就可以实现了,注意的是我们获取ref的时候,因为是for循环生成的,所以一定要this.$refs?.ruleForm1[0]这种后面取0索引的形式拿,不然用validate方法会报undefined的错误的。
效果
点击确定按钮的时候就会校验所有表单,校验通过的话就会有弹窗提醒是否确认提交~
三、总结
以上就是简单的循环表单校验的方法啦~ github链接:github.com/qiangguangl…
本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!