解决ElementUI动态表单校验验证不通过

这里记录一下,写项目时遇到的一个问题:就是动态渲染的表单项,加验证规则后一直不通过!!!

原代码

html部分:

html 复制代码
     <el-form-item
            v-for="(teaclass,index) in addFom.classIds"
            :label="`班级${index+1}`"
            prop="classId"
          >
            <el-row :gutter="12">
              <el-col :span="12">
                <el-select v-model="teaclass.classId" placeholder="请选择">
                  <el-option
                    v-for="(item) in filterOptions[index]"
                    :label="item.className"
                    :value="item.classId"
                    :key="item.classId"
                  />
                </el-select>
              </el-col>
              <el-col :span="5">
                <el-button type="danger" icon="el-icon-delete" circle @click="removeClassId(index)"/>
              </el-col>
            </el-row>
          </el-form-item>
          <el-form-item>
            <el-button type="success" @click="submitTake('ruleForm')">提交</el-button>
            <el-button @click="addClassId" :disabled="disabled">添加班级</el-button>
          </el-form-item>

js部分:

javascript 复制代码
 return {
      tableData: [],
      teaName: '',
      page: 1,
      total: 0,
      pageSize: 12,
      classData: [],
      show: false,
      dra: false,
      direction: 'rtl',
      addFom: {
        teaName: '',
        teaSex: true,
        teaType: true,
        teaPhone: '',
        seniority: 0,
        classIds: [{}]
      },
      classAll: [],
      disabled: false,
      rules: {
        teaName: [{ required: true, message: '请输入教师名称', trigger: 'blur' }],
        teaSex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
        teaType: [{ required: true, message: '请选择类型', trigger: 'blur' }],
        teaPhone: [
          { required: true, message: '请输入联系电话', trigger: 'blur' },
          { min: 11, max: 11, message: '请输入长度11位的大陆号码', trigger: 'blur' }
        ],
        seniority: [{ required: true, message: '请输入教龄', trigger: 'blur' }],
        classId: [{ required: true, message: '请选择班级', trigger: 'change' }]
      }
    }

结果:

可以看到,按照官网的写法动态渲染的表单项是无法进行校验验证的。这里就是无论选中没选中值都校验不通过。

解决

修改prop、rules

javascript 复制代码
     <el-form-item
            v-for="(teaclass,index) in addFom.classIds"
            :label="`班级${index+1}`"
            :prop="'classIds.'+ index + '.classId'"
            :rules="rules.NotEmpty"
          >
            <el-row :gutter="12">
              <el-col :span="12">
                <el-select v-model="teaclass.classId" placeholder="请选择">
                  <el-option
                    v-for="(item) in filterOptions[index]"
                    :label="item.className"
                    :value="item.classId"
                    :key="item.classId"
                  />
                </el-select>
              </el-col>
              <el-col :span="5">
                <el-button type="danger" icon="el-icon-delete" circle @click="removeClassId(index)"/>
              </el-col>
            </el-row>
          </el-form-item>
javascript 复制代码
    rules: {
        teaName: [{ required: true, message: '请输入教师名称', trigger: 'blur' }],
        teaSex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
        teaType: [{ required: true, message: '请选择类型', trigger: 'blur' }],
        teaPhone: [
          { required: true, message: '请输入联系电话', trigger: 'blur' },
          { min: 11, max: 11, message: '请输入长度11位的大陆号码', trigger: 'blur' }
        ],
        seniority: [{ required: true, message: '请输入教龄', trigger: 'blur' }],
        NotEmpty: [{ required: true, message: '请选择班级', trigger: 'change' }]
      }

结果:

相关推荐
我命由我123451 分钟前
React - 创建 React 项目、React 项目结构、React 简单案例、TodoList 案例
前端·javascript·react.js·前端框架·ecmascript·html5·js
SuperEugene3 分钟前
Vue3 Pinia 状态管理规范:何时用 Pinia 何时用本地状态|状态管理与路由规范篇
开发语言·前端·javascript·vue.js·前端框架
Moment4 分钟前
TypeScript 要换芯了,6.0 竟是旧编译器的最后一舞
前端·javascript·github
技术钱19 分钟前
vue3基于 Vxe Table 实现可拖拽分组 + 动态求和的高级表格
javascript·vue.js
还是大剑师兰特20 分钟前
Vue3 + Element Plus 日期选择器:开始 / 结束时间,结束时间不超过今天
前端·javascript·vue.js
不会写DN21 分钟前
Js常用数组处理
开发语言·javascript·ecmascript
还是大剑师兰特22 分钟前
数组中有两个数据,将其变成字符串
开发语言·javascript·vue.js
Saga Two23 分钟前
Vue实现核心原理
前端·javascript·vue.js
技术钱23 分钟前
vue3实现时间根据系统时区转换对应的时间
javascript·vue.js
殷忆枫30 分钟前
基于STM32的ML307R连接Onenet平台
服务器·前端·javascript