链接的文档指出,一旦图表被绘制到页面上,render() 就会返回一个承诺。
然而,代码似乎会立即返回该承诺(这是有道理的)并在绘制图表时解决该承诺。
据我所见,在 promise 像这样解决之后设置和保持状态标志就足够了:
let chart = new ApexCharts(el, options);
chart.render().then(() => chart.ohYeahThisChartHasBeenRendered = true);
/* ... */
if (chart.ohYeahThisChartHasBeenRendered) {
chart.destroy();
}
评论后更新
是的,这行得通!我为您制作了这个可运行的示例(通常这是提出问题的人的职责;))按下按钮并检查日志):
<html>
<head>
<title>chart test</title>
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
<head>
<body>
<div id="chart"></div>
<script>
let options = {
chart: { type: 'line' },
series: [{ name: 'sales', data: [30,40,35,50,49,60,70,91,125] }],
xaxis: { categories: [1991,1992,1993,1994,1995,1996,1997, 1998,1999]}
},
chart = new ApexCharts(document.querySelector("#chart"), options),
logChart = () => console.log(chart),
destroyChart = () => {
if (chart.ohYeahThisChartHasBeenRendered) {
chart.destroy();
chart.ohYeahThisChartHasBeenRendered = false;
}
};
chart.render().then(() => chart.ohYeahThisChartHasBeenRendered = true);
</script>
<button onclick="logChart()">Log chart</button>
<button onclick="destroyChart()">Destroy chart</button>
</body>
</html>
我怀疑你尝试过这样的方法来检查标志:
chart.render().then(() => chart.ohYeahThisChartHasBeenRendered = true);
console.log(chart.ohYeahThisChartHasBeenRendered);
它不会做你所期望的,因为承诺还没有解决。
在另一条评论后更新
正如评论所指出的,apexcharts 存在一个相关的已知问题:
https://github.com/apexcharts/apexcharts.js/pull/415