【发布时间】:2022-10-25 17:56:49
【问题描述】:
我在 Angular 中读过有关 NG0100:ExpressionChangedAfterItHasBeenCheckedError 的信息,但在 my case 中我无法避免它。
基本上,在拦截器上,我有一个加载“状态”真/假的服务:
拦截(请求:HttpRequest,下一个:HttpHandler):Observable { this.showLoader();
return next.handle(req).pipe(
catchError((error) => {
return error;
}),
finalize(() => {
this.hideLoader();
})
);
}
在应用程序组件中使用 ngAfterViewInit 会引入该错误:
ngOnInit(): void {}
ngAfterViewInit() {
this.getData().subscribe((data) => {
this.childSelector.loadRecipeRoadmap(data.name);
});
}
而且我需要使用它:事实上,当所有孩子都被加载时,父母必须向孩子“发送”(一次)数据(仅在开始时)。在某些时候,我只需要从 child 读取(这就是我使用 ViewChild 而不是 @Output 机制的原因)。
如何解决此特定错误?我应该同步 Observable 吗?不知道怎么...
【问题讨论】:
-
我建议加载程序的显示/隐藏由主题(由拦截器更新)处理,然后在组件中使用
debounceTime运算符来防止竞争条件。您可以在debounceTime上设置低至 5 毫秒的值来限制排放,而不会明显影响性能 -
答案在您在问题中发布的文章的链接中
-
@Drenai 不是真的。 SetTimeout 和 Promise 给出相同的错误。并且不能使用 ngOnInit,因为此时还没有加载孩子......
-
也许
detectChanges- 这是他们描述的我见过最常用的那个 -
@Drenai 似乎更像是“快速修复”而不是解决方案:(
标签: angular