关于前端:elform-多层级表单

17次阅读

共计 1901 个字符,预计需要花费 5 分钟才能阅读完成。

前言

本篇文章基于 vue、element-ui

需要

前端开发过程中,常常遇到表单开发的需要,element-ui 为咱们带来了极大的便当,前端只须要更专一于前端逻辑。

咱们往往会遇到绝对简单的表单,比方上面的表单:

咱们设计的时候能够把它设计成 3 级表单,即划分表单到每一个校验项(输入框,下拉框的等)

最终实现成果如下图所示:

实现

el-form 应用,详情可参见:Form 表单

有几个比拟重要的属性:

  • ref 相当于标签的 id
  • model 表单数据对象
  • rules 表单验证规定
  • prop 表单域 model 字段
  • label 标签文本

在提交按钮的时候,执行 validate 办法即可;实时校验可在 rules 中设置校验项 trigger: ‘change’即可

1.el-form 设计

划分表单到每一个校验项(输入框,下拉框的等),能够设计成 3 级表单

处分设置 这一个校验项略微简单一点,能够动静绑定 model 和 rules 实现子项的表单校验

<!-- 一级表单 -->
<el-form class="form" ref="form" :model="form" :rules="form_rules" size="small">
  <el-form-item label="红包流动题目" prop="name">
    <el-input v-model='form.name' placeholder="请输出红包流动题目(流动展现)" />
  </el-form-item>
  <el-form-item :label="` 处分设置(${form.seconde_form.length}/${max_reward_module_num})`" prop="seconde_form">
    <el-card class="reward_module" v-for="(second_form, second_form_index) in form.seconde_form" :key="`${second_form_index}_second_form`">
      <!-- 二级表单 -->
      <el-form class="second_form" :ref="`second_form_${second_form_index}`" :model="second_form" :disabled="is_form_item_disabled" inline size="small">
        <el-form-item prop="packet_name" :key="`${second_form_index}_packet_name`" :rules="[{required: true, message:' 请输出处分名称 ', trigger:'change'}]" style="width:150px;margin-right:20px;">
          <el-input v-model="second_form.packet_name" />
        </el-form-item>
      </el-form>
    </el-card>
  </el-form-item>
</el-form>

2.el-form-item 子项校验

校验比较简单,只须要获取到每一个表单对象,并执行 validate 即可,二级表单就遍历拿到二级表独自享执行同样的操作

  1. 定义 form 数据模型:
form: {
  name: '',
  seconde_form: [
    {packet_name: '',},
  ],
}, 阿
  1. 封装一个 check_form 办法
/**
 * 表单校验办法
 * @param {String} form_name
 */
function $check_form(form_name) {const form_component = this.$refs[form_name][0] ? this.$refs[form_name][0] : this.$refs[form_name];
  return new Promise((resolve, reject) => {
    form_component.validate(valid => {if (valid) {resolve();
      } else {reject();
      }
    });
  });
}
  1. 点击按钮的时候执行 checkParam 办法
async checkParam(form_name) {
  try {await this.$check_form(form_name);
    for (let i = 0; i < this.form.seconde_form.length; i++) {await this.$check_form(`second_form_${i}`);
    }
    // next step do something
  } catch (e) {console.log(e);
  }
},

END

正文完
 0