element-ui 表单校验,el-select校验失效问题

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修复的方法,大家可以借鉴一下,如果大家有更好的方法,可以分享哦

  • 35
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
element-ui 提供了很多表单校验的组件和方法,可以帮助开发者实现前端表单校验功能。 首先,element-ui 提供了一些内置的校验规则,比如必填项、最大长度、最小长度、数字等。你可以在表单组件中使用这些规则来进行校验。例如,在 el-form-item 中使用 prop 属性指定要校验的字段,在 el-input 中使用 rules 属性来设置校验规则,如下所示: ```html <template> <el-form @submit="handleSubmit"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username" placeholder="请输入用户名"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="form.password" placeholder="请输入密码" type="password"></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: { username: '', password: '' } } }, methods: { handleSubmit() { this.$refs.form.validate(valid => { if (valid) { // 表单校验通过,可以进行提交操作 // ... } else { // 表单校验不通过 return false; } }); } } } </script> ``` 上述代码中,通过设置 el-form-item 的 prop 属性来指定要校验的字段,在 el-input 中使用 rules 属性设置校验规则。在 handleSubmit 方法中,使用 this.$refs.form.validate 方法来触发表单校验,该方法接收一个回调函数,当表单校验通过时,回调函数中的 valid 参数为 true,否则为 false。 除了内置的校验规则,element-ui 还允许开发者自定义校验规则。你可以通过自定义校验函数来实现更复杂的校验逻辑。具体的自定义校验规则可以参考 element-ui 的官方文档。 希望以上内容能帮助到你,如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值