el-form 清除部分必填项校验 clearValidate

 场景:

  • 切换“供应商类型”时,需要清空“品牌”(必填)的值,并进行重新选择。如果供应商类型选择“业务”时,展示“渠道”字段(必填),选择其他值时,需要js清空“渠道”字段的值。

问题:

  1. 清空“品牌”时,会自动触发校验,清空后页面此字段会标红并展示校验结果及提示语。
  2. 隐藏并清空后,再次选择“业务”显示出来时,会显示校验结果。

期望:

  • 切换“供应商类型”时,通过 v-if 隐藏/展示的字段(如:”渠道“),及一直展示的字段(如:“品牌”)都清空,并页面不反馈/展示校验(失败)的结果

解决办法:

html:

<el-form-item label="供应商分类" prop="providerType">
  <el-select v-model="form.providerType" placeholder="请选择供应商分类" @change="change_providerType">
    <el-option v-for="item in options_supplier" :key="item" :label="item" :value="item" />
  </el-select>
</el-form-item>

<el-form-item label="品牌" prop="brand" key="brand">
  <el-select v-model="form.brand" placeholder="请选择">
    <el-option v-for="item in options_brand" :key="item" :label="item" :value="item" />
  </el-select>
</el-form-item>

<div v-if='form.providerType=="业务"'>
  <el-form-item label="渠道" prop="channel" key="channel">
    <el-select v-model="form.channel" placeholder="请选择渠道" clearable multiple>
      <el-option v-for="(item,ind) in options_channels" :key="ind" :label="item" :value="item" />
    </el-select>
  </el-form-item>
</div>

js:

  change_providerType() {

    this.form.channel = '';

    if (this.form.brand) this.form.brand = '';
    /*
        clearValidate:一定要放在$nextTick中,不然不生效;
       • 清空全部字段校验结果:this.$refs["form"].clearValidate();
       • 清空部分字段校验结果:this.$refs["form"].clearValidate(['brand','channel']);

       * 注意:clearValidate 一定要放在$nextTick中,不然不生效。
    */

    // this.$refs["form"].clearValidate(['brand', 'channel']); // 不生效 - 还是会在上面js清空值的时候触发校验结果。

    this.$nextTick(() => { //生效
      this.$refs["form"].clearValidate(['brand', 'channel']);
    })
  }

猜你喜欢

转载自blog.csdn.net/Shimeng_1989/article/details/130154836