ng2更改检测 - 可能导致定期调用'ApplicationRef_.prototype.tick()'的原因

时间:2016-07-25 03:02:23

标签: angularjs angular angular2-changedetection

我认为@ angular / core中的'ApplicationRef_.prototype.tick()'需要在角度2 RC4中正确更新DOM,(以及正确的早期版本)

在从5分钟快速启动示例(https://angular.io/guide/quickstart)创建的角度2混合设置中,调用此方法,但似乎最初仅称为有限次数。

我遇到混合设置中的变更检测问题(ng1& ng2使用upgradeAdapter一起工作),并且只在某些服务器中出现问题。这使我深入研究变化检测。

我的问题是:什么可能导致'ApplicationRef_.prototype.tick()'被定期调用?似乎在我的组件工作的情况下,这个方法被定期调用,而不是像5分钟快速启动那样有限的时间。也许我需要强制确保它能够稳定运行。

很抱歉没有吸尘器,因为我无法生成当前情况的简化版本

谢谢!

1 个答案:

答案 0 :(得分:-1)

事实证明ng2升级适配器RC.4存在错误 - > 2.0.1 final。

upgrade_adapter.ts

ngZone.onMicrotaskEmpty.subscribe({
  next: (_: any) => ngZone.runOutsideAngular(() => rootScope.$evalAsync())
});

如果改为:

ngZone.onMicrotaskEmpty.subscribe({
  next: (_: any) => ngZone.run(() => rootScope.$evalAsync())
});

变化检测似乎有效。

一个缺点是:这将重新引入无限$rootScope.$digesthttps://github.com/angular/angular/issues/6385