我在我的角度应用程序中遇到了这种情况,我必须这样做
... // change @input of a component
setTimeout(() => { // wait for the component to process the change
... // do stuff
});
现在我注意到,如果我使用tick
函数,我可以得到相同的结果ApplicationRef
this.appRef.tick();
这看起来是一种更好(更有棱角(的方式。
所以我的问题是,这两种解决方案是否总是有相同的结果。因为如果是这样,我会说setTimeout
更容易,因为您不必将 ApplicationRef 注入构造函数。
这是不一样的:
setTimeout(()=> {});
只是模拟 Angular 拾取的异步事件以对当前组件执行更改检测。 您可以将其视为与ChangeDetectorRef的这种使用相同
_changeDetectorRef.detectChanges()
而你的
this.appRef.tick();
将检查整个应用程序和当前加载在视图树中的所有组件,而不是您正在使用的单个组件。
我会说一个同时加载了许多组件的应用程序,setTimeout 应该比 appRef.tick 快,但我认为速度差异通常在于毫秒,如果不是更少的话。
除了这种差异之外,其他一切都保持不变