我已经看到在Angular 2组件类中使用了以下内容:
setTimeout(()=>{}, 0);
这意味着,在0秒后调用一个空函数.我知道这与Javascript事件模型有关,但完全不了解它.
请使用带有一些代码片段的小型真实示例解释何时以及为何在Angular 2中完成此操作.
setTimeout(()=>{}, 0);
导致Angular对整个应用程序运行更改检测,例如ApplicationRef.tick
zone.js修补程序异步API(addEventHandler
,, setTimeout
...)并在回调完成后运行更改检测.
我会补充一下Gunter的答案,因为它目前很小。
他说 :
setTimeout(()=>{}, 0);
使Angular对整个应用程序运行更改检测
这是因为该setTimeout
方法已被猴子修补以通过角度进行拦截,该角度在拦截时触发更改检测。换句话说,每次setTimeout
都称为发生更改检测。
可以这样做:
const temp = window.setTimeout; window.setTimeout = (...args) => { temp(...args) angular.triggerChangeDetection(); // or w.e they use }
所以0是使更改检测立即发生,而empty函数是因为我们什么都不做。