检查图表是否在 apexcharts 中呈现

2 javascript apexcharts

我正在销毁图表,但是当它没有呈现时我会收到错误。

有没有办法检查图表是否已渲染,然后销毁它?

if(chart)
chart.destroy()
Run Code Online (Sandbox Code Playgroud)

每次我销毁一个不存在的对象时,我都会收到TypeError : 无法在“Node”上执行“removeChild”:参数 1 不是“Node”类型。

另外,如果没有渲染,我需要再次渲染它,我不会一次又一次地渲染它。我需要那张支票

lup*_*upz 5

链接的文档指出,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