> 文章列表 > el-form 清除部分必填项校验 clearValidate

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

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']);})}