场景:
- 切换“供应商类型”时,需要清空“品牌”(必填)的值,并进行重新选择。如果供应商类型选择“业务”时,展示“渠道”字段(必填),选择其他值时,需要js清空“渠道”字段的值。
问题:
- 清空“品牌”时,会自动触发校验,清空后页面此字段会标红并展示校验结果及提示语。
- 隐藏并清空后,再次选择“业务”显示出来时,会显示校验结果。
期望:
- 切换“供应商类型”时,通过 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']);
})
}