现象:
在el-tab-pane标签上使用v-show,即使v-show的值为false,el-tab的标签仍然展示。即使将v-show加在slot子节点上,也会显示tab的背景图和close图标;如下图:
解决方法一:可以使用使用v-if,亲测有效。
但是有些场景下不适合使用v-if,比如切换比较频繁,并且需要保留之前的状态等
解决方法二:
注意观察tab的dom结构,你会发现el-tab-pane会生成一个唯一id,id的值就是tab-加上name属性的值。
watch:{
'会改变的值'(val){
if(xxxxx){
// 根据条件判断、如果需要隐藏,则获取到id后设置style的display为none
document.getElementById(`tab-${需要设置的tab的name}`).style.display = 'none';
} else {
// 如果需要显示、则获取到id后设置style的display为inline-block
document.getElementById(`tab-${需要设置的tab的name}`).style.display = 'inline-block';
}
}
}
解决方法三:
原理类似方法二,使用this.$refs.tabs.$children[0].$refs.tabs获取到dom元素后修改样式
在el-tabs元素上加上ref:
this.$refs.tabs.$children[0].$refs.tabs获取到的值:所有tab页签dom元素的集合。如下图:
watch: {
tabActive: {
handler(val) {
// this.$refs.tabs.$children[0].$refs.tabs获取到的就是所有的tab页签dom元素的集合
// 遍历之后,item.id就是div元素的id属性
// 里面会有tab对应的id值,判断id是否包含顶部页签的值,关联上
// 再设置style是否显示与隐藏
let tabList = this.$refs.tabs.$children[0].$refs.tabs;
tabList && tabList.map(item => {
if (!item.id.includes(this.srcTabActive + val)) {
item.style.display = 'none';
} else {
item.style.display = 'inline-block';
}
});
},
deep: true
}
},
如果帮助到您了,可以留下一个赞告诉我