首页 文章

解释为什么我需要在角度$ timeout中包装highcharts jquery事件来访问属性

提问于
浏览
3

The goal of this question

understand 为什么我必须用事件中嵌入的$timeout, before I can have full access to all the data the highcharts object包装一个highcharts load event处理程序调用来提供 . 如主题中所述,我使用angularjs和highcharts-ng .

我发现加载事件设置为在存在于对象中的所有数据之前触发它真的很奇怪 . 特别是因为我没有使用 addSeries 用数据填充图表 . 我手动构建整个配置对象 . 这种方法也是highcharts-ng规定的方法 .

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

如果我能理解发生了什么,我可以继续前进 . 如果这个问题与 highcharts-ng 的使用有关,我可以放弃它并自己包装 highcharts . 如果有更好的方法来解决我的用例(见下文)也可以 .

The behaviour I am seeing

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

Ok so I discovered这是因为当我在控制台中单击展开时,所有值都已填充 . 但是当我尝试在我的加载处理程序中访问它们时,它们是未定义的 .

当我将回调包装在angular的_2749436中时,问题就消失了 . 但为什么 ? highcharts不应该触发加载回调,直到它完成所有计算,实际上它不能在不计算某些未定义字段的情况下渲染图表 . 什么给出了什么?是否有一些html5 web worker多线程正在进行? :d

Highcharts Animation... Is an animation causing the race like behaviour ?

我找到了一些关于这个问题的参考资料,其中规定的解决方案是挂钩动画完成方法 . The chart has animation disabled . 但我想 highcharts 仍然可以使用一些 jquery 动画?我可以尝试挂钩这个处理程序,如果它可以解决我的问题,并意味着我不必使用 $timeout .

The problem I am trying to solve.

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

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

This question有一些解决问题的潜在解决方案 . 可悲的是,hacky answer似乎是最强大和最简单的 - 即,在情节线上添加一个点并隐藏它 . 我可能会沿着这条路走下去以节省时间 . 虽然我不想 .

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轴值 .

相关问题