情景:有两个tab页A,B,有个共用的头部组件可以实现A,B中echarts的换肤。
问题:现在的情况是单独在A或B里换肤是可以实现的,但是在切换A,B时换肤效果就没了(就是A里实现换肤后,切换到B中没有实现,再从B中返回到A时,A的效果也没了)A,B是两个组件,换肤功能是在他们的父组件里(父组件>中间组件1>中间组件2>A组件)
1、父组件
//切换到A
homeChange() {
if (this.themetype == null) {
// this.themetype = 'dark'
} else {
this.resetSetItem('setThemetype', this.themetype);//这里打印this.themetype是对的
}
},
//切换到B
hjChange() {
if (this.themetype == null) {
// this.themetype = 'dark'
} else {
this.resetSetItem('setThemetype', this.themetype);//这里打印this.themetype是对的
}
},
//换肤
change(theme) {
if (this.themetype == 'dark') {
document.documentElement.setAttribute("data-theme", 'light');
this.themetype = 'light'
console.log('改变为白色主题')
} else {
document.documentElement.setAttribute("data-theme", 'dark');
this.themetype = 'dark'
console.log('改变为深色主题')
}
// sessionStorage.setItem('setThemetype', this.themetype);//ok
this.resetSetItem('setThemetype', this.themetype);//缓存当前主题
},
2、A组件
created() {
window.addEventListener('setItem', () => {
this.type = sessionStorage.getItem('setThemetype');
if (this.type == 'light') {
this.$set(this.options.toolbox.feature.dataView, 'backgroundColor', "#F1F0FE")
} else if (this.type == 'dark') {
this.$set(this.options.toolbox.feature.dataView, 'backgroundColor', "RGBA(8, 24, 54, 1)")
}
})
},
beforeDestroy() {
//清除session
sessionStorage.removeItem('setThemetype');
},