我正在销毁图表,但是当它没有呈现时我会收到错误。
有没有办法检查图表是否已渲染,然后销毁它?
if(chart)
chart.destroy()
Run Code Online (Sandbox Code Playgroud)
每次我销毁一个不存在的对象时,我都会收到TypeError : 无法在“Node”上执行“removeChild”:参数 1 不是“Node”类型。
另外,如果没有渲染,我需要再次渲染它,我不会一次又一次地渲染它。我需要那张支票
链接的文档指出,render()一旦图表绘制到页面,就会返回一个承诺。
然而,代码似乎立即返回该承诺(这是有道理的)并在绘制图表时解决该承诺。据我所知,在承诺解决后设置并保留状态标志应该足够了,如下所示:
let chart = new ApexCharts(el, options);
chart.render().then(() => chart.ohYeahThisChartHasBeenRendered = true);
/* ... */
if (chart.ohYeahThisChartHasBeenRendered) {
chart.destroy();
}
Run Code Online (Sandbox Code Playgroud)
评论后更新
是的,这有效!我为您制作了这个可运行的示例(通常这是提出问题的人的职责;))按下按钮并检查日志):
<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>
Run Code Online (Sandbox Code Playgroud)
我怀疑您尝试过类似的操作来检查标志:
chart.render().then(() => chart.ohYeahThisChartHasBeenRendered = true);
console.log(chart.ohYeahThisChartHasBeenRendered);
Run Code Online (Sandbox Code Playgroud)
它不会做你期望的事情,因为承诺还没有解决。
另一条评论后更新
正如评论所指出的,apexcharts 存在一个相关的已知问题: https ://github.com/apexcharts/apexcharts.js/pull/415
| 归档时间: |
|
| 查看次数: |
15515 次 |
| 最近记录: |