为了账号安全,请及时绑定邮箱和手机立即绑定

ExpressionChangedAfterItHasBeenCheckedError解释

ExpressionChangedAfterItHasBeenCheckedError解释

千万里不及你 2019-08-06 17:08:56
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修复。
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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


查看完整回答
反对 回复 2019-08-06
?
慕容森

TA贡献1853条经验 获得超18个赞

此错误表示应用程序中存在实际问题,因此抛出异常是有意义的。

devMode更改检测中,在每次常规更改检测运行后添加一个额外的转弯,以检查模型是否已更改。

如果模型在常规和附加变化检测转弯之间发生了变化,则表明这两者之一

  • 变化检测本身已经引起了变化

  • 每次调用时,方法或getter都会返回不同的值

哪些都不好,因为不清楚如何继续,因为模型可能永远不会稳定。

如果Angular运行更改检测直到模型稳定,它可能会永远运行。如果Angular未运行更改检测,则视图可能不会反映模型的当前状态。

另请参阅Angular2中的生产和开发模式有何区别?


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 2131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信