【发布时间】:2019-12-03 09:57:58
【问题描述】:
我正在尝试从图表中删除数据(yAxis/series),但我不明白为什么我的代码无法正常工作。我正在使用图表将 Observable 数据从父组件发送到子组件。我有 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() 时循环的迭代丢失的答案。同步有问题吗?
感谢您的回答。
【问题讨论】:
-
你能在像代码沙盒这样的在线代码编辑器中重现这个问题吗?您可以将此演示用作模板:codesandbox.io/s/543l0p0qq4.
-
我不能。我正在使用 NgRx 和真实的 Api 数据。这个项目很大,所以复制它需要很多时间。我知道这会更容易为您展示。我可以告诉你,图表的组件正在从 Store 获取数据,我正在使用 Store 清除它。当我从商店获取系列(@Input())已清除的信息时,图表正在更新。在此更新方法中,我正在检查已保存的图表系列并将其删除,如示例中所示。我已经调试了代码,如果我不使用 setTimeout() 会错过一些迭代。
-
我认为同步或类似问题存在问题。 remove() 不与循环同步,并且一些迭代比 remove() 操作完成得更快。但我不确定这是否是答案。我正在寻找可能知道为什么会发生这种情况的人:)
-
另一种好奇心。如果我们用 yAxis.remove(true) 注释该行,则循环正常工作。这看起来 yAxis.remove(true) 操作在这里出现问题。
标签: javascript angular highcharts