form表单验证时,遇到了校验失效问题,有值的情况下,校验规则并没有对应消失,检查了几个容易出错的地方:1、:model="addForm" 用model绑定表单,而不是v-model,没问题

 <el-form
          :model="addForm"
          class="addForm"
          ref="addForm"
          :rules="rules"
          label-position="right"
          label-width="130px"

        >
 </el-form>

2、需要添加校验的对应字段,是否添加了prop属性,ok没问题

  <el-form-item :label="`对应字段:`" prop="fieldName">
                <el-select
                  v-model="addForm.fieldName"
                  placeholder="请选择对应字段"
                  clearable
                  style="width: 100%;max-width: 100%;"
                  @change="changeField"
                  :disabled="operType == 2"
                >
                  <el-option
                    v-for="item in fieldList"
                    v-bind:key="item.fieldName"
                    :label="item.fieldName"
                    :value="item.fieldName"
                  ></el-option>
                </el-select>

3、检查rules,里面校验提示的事件是否正确,发现了问题,之前el-select,trigger时候用的“blur”,导致失效,现在 el-select 统一改为"change"

  rules: {
      
        ruleCode: [
          { required: true, message: `规则编码不能为空`, trigger: "blur" }
        ],
        menuCode: [
          { required: true, message: `对应菜单不能为空`, trigger: "change" }
        ],
        tableName: [
          { required: true, message: `对应表不能为空`, trigger: "change" }
        ],
        fieldName: [
          { required: true, message: `对应字段不能为空`, trigger: "change" }
        ]
      },

奇怪的是,我表单里面有三个el-select,其他两个生效了,只有另外一个没有生效,也是醉了,于是我请教了大佬,大佬告诉我,form表单里面,el-select会出现失效的情况,尤其是我这个el-foem-item 里面又嵌套了el-row 

   <el-col :span="12">
              <el-form-item :label="`对应表:`" prop="tableName">
                <el-select
                  v-model="addForm.tableName"
                  placeholder="请选择对应表"
                  clearable
                  style="width: 100%;max-width: 100%;"
                  @change="change"
                  :disabled="operType == 2"
                >
                  <el-option
                    v-for="item in tableList"
                    :key="item.tableName"
                    :label="item.tableName"
                    :value="item.tableName"
                  ></el-option>
                </el-select>
              </el-form-item>
            </el-col>

,层级太深了,form检测不到addform的变化,这个时候要么change事件里面强制更新dom触发(视图更新)

change(val){
this.$set(this.addForm,'tableName',val)
this.$forceUpdate()
}

,要么再change事件里面对form表单绑定的数据进行拷贝 this.addForm = JSON.parse(JSON.stringify(this.addForm));或者  像这样描述下    this.addForm = { ...this.addForm };

change(val){
this.addForm={...this.addForm}
}

我遇到的问题,通过第二种方式:拷贝或者描述生效的,以上是我近期遇到的bug修复的方法,大家可以借鉴一下,如果大家有更好的方法,可以分享哦

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐