当前位置:  开发笔记 > 编程语言 > 正文

何时以及为何在Angular 2中使用'tick'?

如何解决《何时以及为何在Angular2中使用'tick'?》经验,为你挑选了2个好方法。

我已经看到在Angular 2组件类中使用了以下内容:

setTimeout(()=>{}, 0);

这意味着,在0秒后调用一个空函数.我知道这与Javascript事件模型有关,但完全不了解它.

请使用带有一些代码片段的小型真实示例解释何时以及为何在Angular 2中完成此操作.



1> Günter Zöchb..:
setTimeout(()=>{}, 0);

导致Angular对整个应用程序运行更改检测,例如ApplicationRef.tick

zone.js修补程序异步API(addEventHandler,, setTimeout...)并在回调完成后运行更改检测.


您也可以在区域外执行(按区域api).但同样,你必须知道这一点.我参加过由Angular团队主持的一些Angular 2聚会,并没有人提到这一点,尽管他们确实讨论了区域是如何成为新的摘要.

2> Ced..:

我会补充一下Gunter的答案,因为它目前很小。

他说 :

setTimeout(()=>{}, 0); 使Angular对整个应用程序运行更改检测

这是因为该setTimeout方法已被猴子修补以通过角度进行拦截,该角度在拦截时触发更改检测。换句话说,每次setTimeout都称为发生更改检测。

可以这样做:

const temp = window.setTimeout;
window.setTimeout = (...args) => {
    temp(...args)
    angular.triggerChangeDetection(); // or w.e they use
}

所以0是使更改检测立即发生,而empty函数是因为我们什么都不做。

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有