猿问

ExpressionChangedAfterItHasBeenCheckedError解释

ExpressionChangedAfterItHasBeenCheckedError解释

请向我解释为什么我一直收到这个错误: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.

显然,我只是在开发模式下获得它,它不会在我的生产版本中发生,但它非常烦人,而我根本不理解在我的开发环境中出现错误的好处 - 这些错误不会出现在prod上 - - 可能是因为我缺乏理解。

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

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

或者使用如下构造函数强制检测更改constructor(private cd: ChangeDetectorRef) {}::

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

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


千万里不及你
浏览 2132回答 3
3回答

陪伴而非守候

我有一个类似的问题。看一下生命周期钩子文档,我改变ngAfterViewInit了ngAfterContentInit它并且它起作用了。

慕容森

此错误表示应用程序中存在实际问题,因此抛出异常是有意义的。在devMode更改检测中,在每次常规更改检测运行后添加一个额外的转弯,以检查模型是否已更改。如果模型在常规和附加变化检测转弯之间发生了变化,则表明这两者之一变化检测本身已经引起了变化每次调用时,方法或getter都会返回不同的值哪些都不好,因为不清楚如何继续,因为模型可能永远不会稳定。如果Angular运行更改检测直到模型稳定,它可能会永远运行。如果Angular未运行更改检测,则视图可能不会反映模型的当前状态。另请参阅Angular2中的生产和开发模式有何区别?
随时随地看视频慕课网APP

相关分类

AngularJS
我要回答