el-form设置规则校验,在父子组件中多个表单需同时校验

如上:
数据源和格式化分别在不同的两个子组件中,同时引用在了父组件中,需要在父组件中点击确定按钮时,校验父组件及两个子组件中的表单是否均满足校验。
使用el-form的:rules="rules"结合this.$refs[formName].validate((valid) => {}来做。
实现代码:
1.父组件设置rules规则,然后传入每个子组件:
引用子组件
<!-- 数据源 -->
<div class="data_source">
<Com-template-data-source
ref="ComTemplateDataSourceRef"
:rules="rules"
:component-type="componentType"
:sourceType="sourceType"
/>
</div>
<!-- 格式化 -->
<div class="formatting">
<div class="top_title">格式化</div>
<Com-template-format
ref="ComTemplateFormatRef"
:rules="rules"
:component-type="componentType"
/>
</div>
父组件中设置rules规则
rules: {
componentName: [
// 组件名称
{ required: true, message: "请输入组件名称", trigger: "blur" },
],
reportId: [
// 报表id
{ required: true, message: "请选择报表id", trigger: "blur" },
],
groupOne: [
// 一级分组
{ required: true, message: "请选择一级分组", trigger: "blur" },
],
valueData: [
// 统计值
{ required: true, message: "请选择统计值", trigger: "blur" },
],
unit: [
// 显示单位
{ required: true, message: "请选择显示单位", trigger: "blur" },
],
sortingCondition: [
// 排序条件
{ required: true, message: "请选择排序条件", trigger: "blur" },
],
},
2.在父组件中点击确定时判断是否均满足校验:
// 当前弹框form校验
const p1 = new Promise((resolve, reject) => {
this.$refs["form"].validate((valid) => {
if (valid) resolve();
});
});
// 数据源组件form校验
const p2 = new Promise((resolve, reject) => {
this.$refs["ComTemplateDataSourceRef"].$refs["form"].validate(
(valid) => {
if (valid) resolve();
}
);
});
// 格式化组件form校验
const p3 = new Promise((resolve, reject) => {
this.$refs["ComTemplateFormatRef"].$refs["form"].validate((valid) => {
if (valid) resolve();
});
});
Promise.all([p1, p2, p3]).then(async () => {
// 做处理
});
注意:
1.在elementui中只有对一个表单的校验,当对多个表单校验且属于不同的组件中时,可以采用上述办法,通过refs获取到对应的子组件,然后在el-form中设置ref="form",在获取到子组件时再通过refs获取到组件中的form表单,即可判断是否满足校验规则了。
2.其实不分为多个子组件来写也是可以的,这样可以直接在一个form中做校验,但是由于考虑到数据操作方法过多,会比较不好维护辨认,所以分离出多个子组件来做。
2.设置校验需要几部分::rules="rules"、ref="form"、prop="name"、this.$refs[formName].validate((valid)。
3.参考博客:https://www.cnblogs.com/junechen/p/11005324.html

浙公网安备 33010602011771号