使用 shallowRef 接收 Echarts 对象
const chart = shallowRef(null);
chart.value = Echarts.init(document.getElementById(domId), theme, initOption);
需要在组件销毁时同步销毁图表对象
onUnmounted(() => {
chart.value.dispose();
});
useChart.js
import { onUnmounted, shallowRef } from 'vue';
import Echarts from '@/utils/echarts';
import * as _throttle from 'lodash/throttle';
export default function ({ domId, theme = 'antv', initOption, chartSchema, resizeWaitTime = 100 }) {
let throttledChartResize = null;
const chart = shallowRef(null);
let isChartFirstLoaded = false;
const initChart = () => {
if (!isChartFirstLoaded) {
chart.value = Echarts.init(document.getElementById(domId), theme, initOption);
chartSchema && chart.value.setOption(chartSchema);
throttledChartResize = _throttle(chart.value.resize, resizeWaitTime);
window.addEventListener('resize', throttledChartResize);
}
};
onUnmounted(() => {
if (throttledChartResize) window.removeEventListener('resize', throttledChartResize);
chart.value.dispose();
});
return { chart, initChart };
}
使用:
const { chart, initChart } = useChart({
domId: 'chart_container',
chartSchema: {
legend: {},
tooltip: {
trigger: 'item',
},
series: [
{
name: '来源',
type: 'pie',
radius: ['20%', '60%'],
roseType: 'area',
},
],
},
});
onMounted(() => {
initChart();
});