elementUI表单验证遇到的问题

1.同一个addForm表单,同样的验证规则,有的输入框在没填写时能够显示红色,有的却毫无反应

解决方案:去elementUI官网看了一下验证表单的规则及属性,第一句就写

Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。校验规则参见 async-validator

关键在prop这个属性,表单域没写prop属性,像是我能干出来的事,每次隔很久不干活就会忘记一些属性的作用,老想删除 (见不得一点冗余代码,bushi)

复制代码
<el-form :model="addForm" :rules="rules" ref="addForm" label-width="85px">
                <el-form-item label="值班辖区:" prop="dutyArea">
                  <el-select
                    style="width: 60%"
                    clearable
                    v-model="addForm.dutyArea"
                    placeholder="请选择值班辖区"
                  >
                    <el-option
                    v-for="dict in dict.type.maintain_fault_area"
                      :label="dict.label"
                      :value="dict.value"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="值班人员" prop="dutyPersonName">
                  <el-select v-model="addForm.dutyPersonName" filterable placeholder="请选择值班人员" style="width: 60%"  @change="handchange($event)">
                      <el-option
                          v-for = "item in dutyUserList"
                          :label="item.nickName"
                          :value='{personName:item.nickName,personId:item.userId}'>
                      </el-option>
                    </el-select>
                </el-form-item>
                <el-form-item label="值班时间" prop="dutyTime">
                  <el-input v-model="addForm.dutyTime" style="width: 60%" :disabled="true"></el-input>
                </el-form-item>
                
                <el-form-item label="是否备班:" prop="prepareClass">
                  <el-select
                    style="width: 60%"
                    clearable
                    v-model="addForm.prepareClass"
                    placeholder="请选择备班状态"
                  >
                    <el-option
                    v-for="dict in dict.type.maintain_fault_prepare_class"
                      :label="dict.label"
                      :value="dict.value"
                    >
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-form>
              <div class="demo-drawer__footer">
                <el-button @click="handleClose">取 消</el-button>
                <el-button type="primary" @click="submit"> 确定 </el-button>
              </div>
            </div>
          </el-drawer>

补充两点: a.值班时间设置默认读取点击进来的日历时间,所以不需要选择,禁用掉!

属性:<el-input v-model="addForm.dutyTime" style="width: 60%" :disabled="true"></el-input>


或:<el-date-picker clearable

v-model="queryParams.dutyTime"

type="date"

value-format="yyyy-MM-dd"

:readonly="dutyRead"

placeholder="请选择值班时间">

</el-date-picker>

b.下拉选框设为默认选项:在data() 函数中直接设addform属性数据为1没有生效,想到了在重置按钮中再次加强一遍

复制代码
// 单日添加(失败)
      addForm: {
        dutyClass: "",
        dutyPersonName: "",
        dutyArea: "",
        dutyType: "",
        dutyTime: "",
        prepareClass: '0',
      },
// 表单重置(成功)
    reset() {
      this.addForm = {
        id: null,
        dutyTime: this.hanleDay.day,
        dutyPerson: null,
        dutyPersonName: null,
        dutyArea: null,
        dutyClass: null,
        dutyType: null,
        prepareClass: '1',
      };
      this.resetForm("form");
    },

2.表单验证第一次进去时不显示警告,但是第二次刚进去即使没有操作也会全部红色报错

解决方案:一开始怀疑是表单验证的触发方式有问题,试了几种解决方案

a.

rules:{

dutyPersonName:{ required: true, message: "请输入值班人员姓名" ,trigger: 'click'},

dutyArea:{ required: true, message: "请输入值班辖区" ,trigger: 'click'},

dutyClass:{ required: true, message: "请输入值班班次" ,trigger: 'click'},

dutyType:{ required: true, message: "请输入业务类型" ,trigger: 'click'},

},

手动设置触发方式为 click,这是我从Popover弹出框组件借鉴的(无用)

b.借鉴前面的代码片段,改为 { required: true, message: "请输入质保期", trigger: "blur" },(无用)

c.考虑从生命周期的钩子函数显示表单验证的触发方式

mounted() {

this.$nextTick(() => {

this.$refs.addForm.validate();

});

},(无用且不知道为什么没有,看起来很符合逻辑啊?)

d.最终借鉴网友的经验解决

复制代码
addSingleWork() {
      this.reset()
      this.innerDrawer = true;
      if (this.$refs.addForm)
        this.$refs.addForm.resetFields();
    },
相关推荐
yume_sibai9 分钟前
大屏数据可视化 - 边框红绿呼吸灯实现详解
前端·信息可视化·typescript
竹林81822 分钟前
从 ethers.js 迁移到 Viem:一个签名验证 Bug 让我彻底放弃旧爱
javascript
Hyyy35 分钟前
很多Desktop都在上的Computer Use是什么
前端·llm
慢功夫36 分钟前
开篇:VS Code 为什么不是一个普通 React App
前端·visual studio code
你挚爱的强哥1 小时前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
半个落月1 小时前
用 LangChain.js 手写一个能读写文件和执行命令的 Mini Cursor
javascript·人工智能·后端
天外天-亮1 小时前
HBuilder X 使用 uview-plus 方式
开发语言·javascript·hbuilder x·uview-plus
huashengzsj1 小时前
Shopify个人建站如何搭建独立站:从零开始的完整指南
前端·网络·人工智能
程序猿小泓2 小时前
从 Claude Code 学 Agent Harness:一个前端工程师的 AI Agent 学习笔记
前端·人工智能·学习
柒和远方2 小时前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构