首页 > 解决方案 > ApplicationRef.tick 与 setTimeout

问题描述

我必须在我的角度应用程序中遇到这种情况

...                     // change @input of a component
setTimeout(() => {      // wait for the component to process the change
    ...                 // do stuff
});

tick现在我注意到,如果我使用以下函数,我可以获得相同的结果ApplicationRef

this.appRef.tick();

这看起来是一种更好(更有棱角)的方式。

所以我的问题是这两种解决方案总是会产生相同的结果。因为如果是这样,我会说这setTimeout更容易,因为您不必将 ApplicationRef 注入构造函数。

标签: angular

解决方案


这是不一样的:

setTimeout(()=> {});

只是模拟一个 Angular 选择的异步事件来对当前组件执行变更检测。您可以认为它与ChangeDetectorRef的使用相同

_changeDetectorRef.detectChanges()

而你的

this.appRef.tick();

将检查整个应用程序和当前加载到视图树中的所有组件,而不是您正在使用的单个组件。

我会说同时加载了许多组件的应用程序 setTimeout 应该比 appRef.tick 快,但我认为速度差异通常在毫秒内,如果不是更少的话。

除了这个差异之外,其他一切都保持不变


推荐阅读