角度加载微调器错误:ExpressionChangedAfterItHasBeenCheckedError

Ste*_*eBl 3 typescript angular2-changedetection angular

我在我的 Angular 应用程序中做了一个加载微调组件。我用 *ngIf="isLoading" 将它放在路由器出口旁边的应用程序组件中,这样我就可以让它在应用程序的任何地方都可见。
'isLoading' 布尔值正在使用 ngrx 的商店进行全局更新。
现在我有一个错误说

错误:ExpressionChangedAfterItHasBeenCheckedError:检查后表达式已更改。以前的值:'ngIf: true'。当前值:'ngIf:false'

我一直在阅读有关此错误的信息,结论是:不要更改更深层次的子组件的参数值。
那么如何在不重复我的应用程序中的代码并且不导致更改检测错误的情况下制作加载微调器呢?

Lah*_*ima 5

如果您更改构造函数或 中的变量ngOnInit,就会发生这种情况。您可以使用超时来克服此问题。

ngOnInit() {
    setTimeout(() => {
        this.yourVar = 'new value'
    });
}
Run Code Online (Sandbox Code Playgroud)

检查以下以获取更多信息

https://github.com/angular/material2/issues/11357

https://github.com/angular/angular/issues/17572