Element el-form 动态表单校验

2,768 阅读2分钟

在使用 Element UI(Element Plus 是其 Vue 3 版本)时,可以通过 el-formel-form-item 组件来创建一个动态表单项,并支持新增和删除操作。为了进行表单校验,你需要使用 el-formrules 属性来定义校验规则。

以下是一个示例,展示了如何创建一个可以动态新增和删除表单项,并包含校验功能的表单:

示例代码

<template>
  <div>
    <el-form :model="form" :rules="rules" ref="dynamicForm" label-width="120px">
      <div v-for="(field, index) in form.fields" :key="field.key" class="form-item">
        <el-form-item :label="'Field ' + (index + 1)" :prop="'fields.' + index + '.value'">
          <el-input v-model="field.value"></el-input>
        </el-form-item>
        <el-button type="danger" icon="el-icon-delete" @click="removeField(index)"></el-button>
      </div>
      <el-form-item>
        <el-button type="primary" @click="addField">Add Field</el-button>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm('dynamicForm')">Submit</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        fields: [
          { key: 0, value: '' }
        ]
      },
      rules: {
        'fields.*.value': [
          { required: true, message: 'This field is required', trigger: 'blur' }
        ]
      }
    };
  },
  methods: {
    addField() {
      this.form.fields.push({ key: this.form.fields.length, value: '' });
    },
    removeField(index) {
      this.form.fields.splice(index, 1);
    },
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          alert('Submit Success!');
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    }
  }
};
</script>

<style scoped>
.form-item {
  display: flex;
  justify-content: space-between;
  margin-bottom: 20px;
}
</style>

关键点解释

  1. 表单模型(form

    • fields 数组用于存储动态表单项,每个表单项包含一个 keyvalue
  2. 校验规则(rules

    • 使用 fields.*.value 作为动态字段的校验规则,其中 * 表示任意索引。
    • required: true 表示该字段为必填项,message 为校验失败时的提示信息,trigger 为触发校验的事件(如 blur)。
  3. 方法

    • addField 方法用于新增一个表单项。
    • removeField 方法用于删除指定索引的表单项。
    • submitForm 方法用于提交表单,并调用 validate 方法进行校验。
  4. 模板

    • 使用 v-for 指令遍历 fields 数组,动态生成表单项。
    • 每个表单项包含一个 el-form-item 和一个删除按钮。
    • 添加一个按钮用于新增表单项,并添加一个提交按钮用于提交表单。

注意事项

  • 由于 Element UI 的校验规则不支持直接对数组中的对象进行校验,所以这里使用了一个变通的方法,通过 fields.*.value 来表示任意索引的 value 字段。
  • 如果需要更复杂的校验规则,可以考虑在 addFieldremoveField 方法中动态生成和更新 rules 对象。

希望这个示例能帮助你实现动态表单项的新增、删除和校验功能。

如何本文章对您有帮助,请帮博主点个赞吧!