表单嵌套循环多个相同表单(父组件循环嵌套多个子组件表单)校验,使用循环form时,由于子组件提交异步问题,父组件不能获取最新正确的返回结果
this.$refs.children.validate().then(() => {
this.rowObj.validate = true;
console.log( this.rowObj.validate,"子组件校验不通过",this.rowIndex);
}).catch(() => {
this.rowObj.validate = false;
console.log( this.rowObj.validate,"子组件校验不通过");
});
1.提交的地方使用延时器处理异步获取正确的结果。
2.使用 Watcher 监听数据变化: 在父组件中使用 Watcher 监听子组件传递的校验结果数据,一旦数据变化就执行相应的操作返回结果。
javascript
// 在父组件中
watch: {
'formList.form1.validate'(newValue, oldValue) {
// 当校验结果数据发生变化时执行相应操作
console.log(newValue, '校验结果变化');
// 执行其他操作
}
}
3.使用 Promise 返回数据: 子组件向父组件传递校验结果时,可以返回一个 Promise 对象,在 Promise 对象中 resolve 传递校验结果数据。父组件通过 .then() 方法获取校验结果数据,确保在获取数据时是最新的。
javascript
// 子组件中
toSubmit(e) {
return new Promise((resolve, reject) => {
// 执行校验逻辑
if (校验通过) {
resolve(true); // 校验通过
} else {
resolve(false); // 校验不通过
}
});
}
// 父组件中
submit() {
this.$refs.form2.validate().then(res => {
this.rowObj.validate = true;
}).catch(errors => {
this.rowObj.validate = false;
});
this.$refs.childComponent.toSubmit().then(result => {
console.log(result, '校验结果');
// 执行其他操作
});
}