这个问题的目标
要了解为什么我必须使用 $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
计算各种最大值和最小值,我想检查这些,如果我的绘图线不在这些最大值和最小值之内,我想设置新的极值并重新绘制图形。
这个问题有一些潜在的解决方案。可悲的是,骇人听闻的答案似乎是最强大和最简单的——即,在情节线上添加一个点并将其隐藏。我可能会沿着这条路线走以节省时间。虽然我不想。