校验v-for中的form表单
场景:
整体外层一个form,内层多个form组成。
点击新增会在增加一个from表单,点击删除即删除一个form。
视图层:
<div
v-for="(item, index) in actionData"
:key="item" class="form-wrapper"
>
<el-form
ref="actionForm"
:model="item"
label-width="68px"
class="item-form"
>
</el-form>
</div>
数据层
data:
actionData: [{ id: 'no1', name: '前端'}];
methods:
/* add */
const add = () => { actionData.push({});};
/* del */
const del = (index) => { actionData.splice(index, 1);};
/* -----校验所有form------ */
const validate = (refs) => {
const promises = refs.map((form, index) => form.validate());
return Promise.all(promises);
};
/* submit */
async function submit = () => {
try {
rule = await validate(this.$refs.actionForm);
} catch (e) {
rule = e;
};
if (!rule) {
return false;
} else {
/* todo*/
}
};
总结:
1、for 循环体 或者map里是不支持await。
2、避免层层嵌套的回调校验。
如果验证失败自动滚定位到校验失败的位置:
const restpotion = () => {
let anchor = document.querySelectorAll('.el-form-item__error')[0];
anchor.scrollIntoView({
block: 'end',
behavior: 'smooth',
});
};
参考:https://juejin.cn/post/7049342392515690526