删除yAxis时留下一些循环迭代-Highcharts / Angular

时间:2019-07-25 07:33:29

标签: javascript angular highcharts

我正在尝试从图表中删除数据(yAxis /系列),但是我不明白为什么我的代码无法正常工作。我正在将可观察的数据从父级发送到带有图表的子级组件。我有2个有效的代码。在我看来,使用remove(true)同步forEach循环存在问题。

我的意思是。当我使用forEach()或for()循环并尝试删除yAxis时,会错过一些循环迭代,并且图表不会删除所有数据。

另一方面,如果我将setTimeout()与remove(true)一起使用,则问题已解决,并且所有操作都将删除。知道有什么问题吗?

可行代码:

    this.chart.series.forEach((serie: Highcharts.Series) => {
        if (!this._series.has(serie.options.id)) {
            const yAxis = this.chart.get(serie.options.id) as Highcharts.Axis;
            if (yAxis) {
                 setTimeout(() => {
                     yAxis.remove(true);
                 });
            }
        }
    });

破损的代码:

        this.chart.series.forEach((serie: Highcharts.Series) => {
            if (!this._series.has(serie.options.id)) {
                const yAxis = this.chart.get(serie.options.id) as Highcharts.Axis;
                if (yAxis) {
                    yAxis.remove(true);
                }
            }
        });

第一个正常工作。我正在寻找答案,为什么当我不使用setTimeout()时,缺少循环的迭代。同步有问题吗?

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

这是通过循环从数组中删除元素的经典问题。当您将remove方法与redraw参数一起使用时,数组将被重新索引。

请检查以下实时示例:http://jsfiddle.net/BlackLabel/fy97u2bv/

解决方案是向后循环:

for (var i = chart.yAxis.length-1; i >= 0; i--) {
    chart.yAxis[i].remove();
}

实时演示: http://jsfiddle.net/BlackLabel/4dt6xjvk/