今天偶遇一个bug,左边侧边栏是那种可以缩放的,但是会造成echarts没有自适应父盒子的宽,刷新页面也会造成echarts的挤压,但是从别的页面跳转过来就不会造成这个问题,根据大神的写法成功解决bug,特此记录一下!!
问题:
解决第一个问题:这个是根据vue-element-admin里面的写法改编
写一个mixins
/**解决左侧菜单栏缩放造成echarts挤压
*/
export default {
data() {
return {
_aside: null,
_onResize: null
};
},
mounted() {
// this问题必须使用箭头函数
this._onResize = () => {
if (this.mychar) {
this.mychar.resize();
}
};
this.$_initResizeEvent();
this.$_initSidebarResizeEvent();
},
beforeDestroy() {
this.$_destroyResizeEvent();
this.$_destroySidebarResizeEvent();
},
methods: {
$_sidebarResizeHandler(e) {
if (e.propertyName === 'width') {
this._onResize();
}
},
$_initResizeEvent() {
window.addEventListener('resize', this._onResize);
},
$_destroyResizeEvent() {
window.removeEventListener('resize', this._onResize);
},
$_initSidebarResizeEvent() {
// 给侧边栏添加transitionend事件
this._aside = document.querySelector('.ant-layout-sider-children');
this._aside && this._aside.addEventListener('transitionend', this.$_sidebarResizeHandler);
},
$_destroySidebarResizeEvent() {
this._aside && this._aside.removeEventListener('transitionend', this.$_sidebarResizeHandler);
}
}
};
在组件中直接按照mixins引入的方式引入即可。。
解决第一个问题:网上的方法很多,我就是直接延迟执行即可
this.timer = setTimeout(() => {
this.initEcharts();
}, 50);