3

这个问题的目标

了解为什么我必须使用 $timeout 包装highcharts 加载事件处理程序调用,然后才能完全访问事件中嵌入的 highcharts 对象旨在提供的所有数据。如主题中所述,我正在使用 angularjs 和highcharts-ng

我觉得很奇怪,在对象中应该存在的所有数据都存在之前,加载事件设法触发。特别是因为我不使用addSeries数据填充图表。我正在手动构建整个配置对象。这种方法也是 highcharts-ng 规定的。

我也很难接受我需要使用 '$timeout' 来处理似乎是竞争条件的情况。这是因为我来自 C++ 背景,它可能不是竞争条件,而只是现代 Web 开发、javascript 和 Jquery 本质的自然怪癖之一。其中我知道的很少。

如果我能理解正在发生的事情,我可以充满信心地继续前进。如果这个问题与我们的使用有关,highcharts-ng我可以放弃它并把highcharts自己包裹起来。如果有更好的方法来解决我的用例(见下文),那也可以。

我看到的行为

我开始通过将 highcharts 对象打印到控制台来解决我的问题,当我扩展它时它显示了所有字段。但是,当我尝试开始解决我的问题时,我开始发现当我尝试访问某些字段时,它们实际上是未定义的。

好的,所以我发现这是因为当我在控制台中单击展开时,所有值都已填充。但是当我尝试在我的负载处理程序中访问它们时,它们是未定义的。

当我将回调包装在 Angular 中时$timeout,问题就消失了。但为什么 ?highcharts 在完成所有计算之前不应触发加载回调,实际上它无法在不计算某些未定义字段的情况下渲染图表。那么什么给了?一些 html5 网络工作者多线程是否正在进行?:D

Highcharts 动画... 动画是否会导致种族行为?

我发现了一些关于这个问题的参考资料,其中规定的解决方案是挂钩动画完整方法。该图表已禁用动画。但我想一些jquery动画可能仍在使用highcharts?如果它可以解决我的问题并且意味着我不必使用$timeout.

我试图解决的问题。

我正在开发一个复杂的可视化应用程序,我需要动态重新缩放 Y 轴,以便始终存在 Y 轴上的 2 条关键绘图线。对极端情况进行硬编码不是一种选择,因为它会阻止图表根据数据范围进行扩展。

Highcharts计算各种最大值和最小值,我想检查这些,如果我的绘图线不在这些最大值和最小值之内,我想设置新的极值并重新绘制图形。

这个问题有一些潜在的解决方案。可悲的是,骇人听闻的答案似乎是最强大和最简单的——即,在情节线上添加一个点并将其隐藏。我可能会沿着这条路线走以节省时间。虽然我不想。

4

1 回答 1

4

我是 highcharts-ng 的作者。

我认为问题在于在 highcharts-ng 中,它初始化图表然后添加系列。

这可以很容易地解决。它需要更改 getMergedOptions: https ://github.com/pablojim/highcharts-ng/blob/master/src/highcharts-ng.js#L245

目前 getMergedOptions 不包括系列对象,因此当图表初始化时它没有系列。这种行为可以改变。有一些复杂性,例如确保该系列具有 ID。但这将是完全可行的。我会在某个时候开始这样做,但同时很高兴地接受了拉取请求。

另一种方法是根据您的数据在 highcharts-ng 配置对象上动态设置 x 和 y 轴值。

于 2014-06-16T12:27:58.467 回答