javascript - 处理重绘的 Angular 方式是什么?

标签 javascript angularjs highcharts

我正在制作一个图表应用程序,允许您使用拖放界面创建图表。

我有 highcharts 并且我正在使用 highcharts-ng指示。

该指令监视标题、选项和系列。当有人做出更改时,我会对其进行处理并对选项对象进行更改。然后 highcharts-ng 重新绘制图表。

我发现的问题是,我连续更改了一些属性,例如 options.xAxis 和 options.yAxis,每当我这样做时,应用程序都会有点滞后,因为它会为每次更改启动重绘。

那么,在保持高效的同时,有什么 Angular 方法可以解决这个问题呢?

我想到的一个潜在的解决方案是向 highcharts-ng 指令添加一个标志,并在它发生更改时触发它。然后在处理完数据后更改它。另一个潜在的解决方案是监听 highchart-ng 指令中的某个事件,然后在收到该事件时触发重绘。但这些解决方案对我来说似乎/感觉有点老套。

最佳答案

Angular 会进行自己的脏检查,并且(理想情况下总是如此,但实际上并非如此)只要相应的 View 模型发生更改,就会重写 DOM 的 Angular 控制部分。我认为这种行为对于 Angular 来说非常重要,如果您不喜欢它,最好解决它,或者使用不同的数据绑定(bind)框架。

我建议的解决方法基本上就是您在第一个选项中所描述的: View 模型内的 View 模型。在指令的范围内有一个私有(private)变量,用于跟踪您感兴趣的更改,这些更改发生的频率比您想要重绘的频率高。然后,当您准备好重绘时(您需要自己的逻辑来确定“准备好”...时间?特定类型的更改?特定的更改阈值?),通过设置您的私有(private)来更新真实 View 模型变量返回到真实 View 模型上的原始字段。

代码草图:

// (inside the directive)

var _options = $scope.options;

// ...
// rapidfire updates happen; save them to _options rather than $scope.options

// ...
// now you're ready to redraw:

$scope.options = _options; // angular now knows $scope is dirty and triggers the redraw

关于javascript - 处理重绘的 Angular 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153995/

相关文章:

javascript - Highcharts.js 设置更改列颜色的阈值

php - Jquery PHP mySQL ajax 方法将数据同步到两个客户端?

javascript - 当我使用 Angular Material 和一些自定义代码时如何解决 Angular 应用程序中的 $event 问题

javascript - 排序未应用于对象列表

javascript - 如何细化 Flow 中的综合事件?

AngularJS - 如何伪造服务器以获取项目中的本地 json 文件?

javascript - 请求的资源上不存在 'Access-Control-Allow-Origin' header 。因此不允许访问 Origin 'http://127.0.0.1:1111'

highcharts - 使 Highchart 和 Highstock 对于不同的数据点具有统一的时间 X 轴

javascript - Faye 的奇怪 Angular.js 行为

javascript - 如何为同一图表中两种不同类型的系列添加两个不同的鼠标悬停?