如果我已经使用OnPush更改检测,在什么情况下我应该使用runOutsideAngular

时间:2017-07-13 18:05:50

标签: angular

我已经使用不可变数据进行OnPush更改检测。我想知道我可以通过使用ngZone.runOutsideAngular进行更改检测吗?我在这里只是寻找一些指导方针。

1 个答案:

答案 0 :(得分:6)

它们并不特别相关。 OnPush控制对每个组件级别的更改检测,而ngZone“排序”触发更改整个应用程序的检测。

Angular使用区域,特别是NgZone,以便在没有任何更多任务时得到通知。在区域中安排的任务将在此区域中执行。因此,setTimeout之类的所有异步任务都在NgZone内执行。 ngZone.runOutsideAngular允许您在ngZone之外安排任​​务,这意味着一旦完成,Angular将不会得到通知,也不会进行更改检测。

如果你有一些反复执行的异步任务,每秒执行多次(如mousemove事件),那么你可以利用ngZone.runOutsideAngular来避免触发每个事件的变化检测。然后,您可以每秒安排一次手动更改检测。除此之外,我无法想到它如何帮助您优化应用程序。