当小程序进引用该组件时,首次进入页面可以正常渲染,但是再次进入页面时汇报错Cannot read property 'baseOption' of undefined,因为上一次进入页面已经创建实例,是存在缓存的,所以当存在实例又再次创建时就会报错,第一时间会想到用 dispose()来销毁,小编尝试过,但没有用,所以,用另一个方法来避过这个坑
用dispose()解决的逻辑:
if (chart != null && chart != "" && chart != undefined) {
chart.dispose(); //销毁, 会报错
}
有效的做法是:
原代码:
let chart = null;
let option = {
title: {
text: '获取数据中',
left: 'center'
},
};
let initChart = (canvas, width, height, dpr) => {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
chart.showLoading(); // 显示Loading
return chart;
};
修改后代码:
let chart = null;
let option = {
title: {
text: '获取数据中',
left: 'center'
},
};
let initChart = (canvas, width, height, dpr) => {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
});
chart.showLoading(); // 显示Loading
if (chart === null) { // 无实例时创建,有实例时不创建, 否则再次进入页面渲染时报错 Cannot read property 'baseOption' of undefined
canvas.setChart(chart);
option = chart.setOption(option);
}
return chart;
};