angular - ExpressionChangedAfterItHasBeenCheckedError 解释

标签 angular angular2-changedetection angular2-databinding

请向我解释为什么我不断收到此错误:ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.

显然,我只在开发模式下得到它,它不会在我的生产构建中发生,但它非常烦人,我根本不明白在我的开发环境中出现错误的好处不会出现生产上——可能是因为我缺乏理解。

通常,修复很简单,我只是将导致错误的代码包装在 setTimeout 中,如下所示:

setTimeout(()=> {
    this.isLoading = true;
}, 0);

或者使用这样的构造函数强制检测变化:constructor(private cd: ChangeDetectorRef) {}:

this.isLoading = true;
this.cd.detectChanges();

但为什么我总是遇到这个错误?我想了解它,以便将来可以避免这些 hacky 修复。

最佳答案

我遇到了类似的问题。看着 lifecycle hooks documentation ,我将 ngAfterViewInit 更改为 ngAfterContentInit 并且它起作用了。

关于angular - ExpressionChangedAfterItHasBeenCheckedError 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43375532/

相关文章:

angular - 为 Angular 7 中的 ng e2e 测试设置特定环境,而无需为应用程序提供服务

javascript - 可观察到返回错误,但请求数据正常返回

angular - 如何检查是否在组件上触发了变更检测

angular - 数据绑定(bind)导致 ExpressionChangedAfterItHasBeenCheckedError

angular - 在 Angular 2 中编写 `[defaultColor]="'violet '"` 的优点/缺点是什么

Angular HTML 绑定(bind)

node.js - 检索通过输入属性传递给子组件的值

angular - 如何使用 Protractor typescript 使用 _ngcontent 和 span buttontext 单击元素

angular - Angular 4+ 是否不可能检测到 Map<string, any> 的变化?

javascript - angular2中的 `changeDetection: ChangeDetectionStrategy.OnPush`是否只在一个方向上起作用: top->bottom?