Bootstrap

el-form表单结合el-row循环数组,动态添加prop,最后进行表单验证

<template>
  <el-form :model="form" :rules="rules" ref="form" @submit="onSubmit">
    <el-form-item v-for="(item, index) in formItems" :key="index" :label="item.label" :prop="item.prop">
      <el-input v-model="form[item.prop]" :placeholder="item.placeholder"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" native-type="submit" >提交</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      form: {},      
      formItems: [
        { label: '用户名', prop: 'username', placeholder: '请输入用户名' },
        { label: '密码', prop: 'password', placeholder: '请输入密码' }
        // 可以根据实际情况添加更多的表单项
      ],
      rules: {
        username: [
          { required: true, message: '用户名不能为空', trigger: 'blur' }
          // 根据需要添加更多验证规则
        ],
        password: [
          { required: true, message: '密码不能为空', trigger: 'blur' }
          // 根据需要添加更多验证规则
        ]
      }
    };
  },
  methods: {
    onSubmit() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          // 表单验证通过后的操作
          console.log('表单验证通过');
        } else {
          // 表单验证未通过的操作
          console.log('表单验证未通过');
        }
      });
    }
  }
};
</script>

在这个示例中,我们使用 v-for 指令循环 formItems 数组,动态生成表单项。
然后在 el-form 上设置 :model (接收的是一个object类型)和 :rules 属性来绑定表单数据和验证规则。
最后,在 @submit 事件上调用 onSubmit 方法来触发表单验证。

为什么el-form上设置的:rules 不生效,要在循环的每个el-form-item上再设置一个:rules呢?

在 Element UI 中,el-form 表单的验证规则应该是可以通过 :rules 属性设置在整个表单上的。如果发现 el-form
上设置的 :rules 不生效,而需要在每个循环的 el-form-item 上再设置一个 :rules 才能生效的话,可能有以下几个原因:

1.错误的数据绑定:确保 :model 和 :rules 正确地绑定到了表单数据和验证规则上。

2.存在其他干扰:可能有其他代码或配置干扰了全局的验证规则生效。请检查是否有其他地方重写或覆盖了验证规则的设置。

3.版本或BUG问题:某些特定版本的 Element UI 可能存在一些 BUG 或问题,导致全局的 :rules 设置不能正确生效。在这种情况下,你可以尝试升级或降级 Element UI 的版本来解决问题。

在大多数情况下,在 el-form 上设置的 :rules 应该可以对整个表单生效,而不需要在每个 el-form-item
上再次设置。如果你遇到了这个问题,可以尝试根据上述原因逐一排查,找到并解决问题的根源。

如何在el-form-item上添加:rules?

<el-form-item label="用户名" :prop="item.prop" :rules="rules.username">
      <el-input v-model="form.username"></el-input>
    </el-form-item>

如果el-form要和el-row 结合使用。 一行多列的情况, 需要循环且提交进行表单校验

如下:在这里插入图片描述
代码:
在这里插入图片描述

el-form 里的 :model=“registerForm” 绑定为一个对象, :rules=“rules” 要配合el-form-item 里的:prop一起使用进行表单验证,:prop要动态绑定数组的值,

;