zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    hihoCoder #1179 : 永恒游戏 (暴力枚举)
    HDU 5269 ZYB loves Xor I (二分法)
    HDU 5268 ZYB loves Score (简单模拟,水)
    acdream 1683 村民的怪癖(KMP,经典变形)
    acdream 1686 梦醒(时钟重合)
    acdream 1685 多民族王国(DFS,并查集)
    acdream 1681 跳远女王(BFS,暴力)
    HDU 5265 pog loves szh II (技巧)
    HDU 5264 pog loves szh I (字符串,水)
    HDU 1023 Train Problem II (卡特兰数,经典)
  • 原文地址:https://www.cnblogs.com/5201314m/p/13736144.html
Copyright © 2011-2022 走看看