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();
    },
相关推荐
橙子家12 分钟前
浏览器缓存之【结构化数据库与缓存】: IndexedDB、Cache storage 和 Storage buckets
前端
user205855615181317 分钟前
X6 中边悬浮置顶,规避 `mouseleave` 事件丢失问题
前端
李明卫杭州19 分钟前
CSS aspect-ratio 属性完全指南
前端
Pedantic2 小时前
SwiftUI 手势层级(Gesture Hierarchy)详解
前端
飘尘2 小时前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
一颗烂土豆3 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
浏览器工程师4 小时前
AI Agent 接浏览器任务,先别让它一路点到底
前端·后端
雨季mo浅忆4 小时前
VSCode自动格式化三要素
前端
爱勇宝4 小时前
深扒 Anthropic 1680 位工程师简历:应届生几乎没机会,AI 公司最缺的不是博士
前端·后端·程序员