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贡献1853条经验 获得超18个赞
此错误表示应用程序中存在实际问题,因此抛出异常是有意义的。
在devMode
更改检测中,在每次常规更改检测运行后添加一个额外的转弯,以检查模型是否已更改。
如果模型在常规和附加变化检测转弯之间发生了变化,则表明这两者之一
变化检测本身已经引起了变化
每次调用时,方法或getter都会返回不同的值
哪些都不好,因为不清楚如何继续,因为模型可能永远不会稳定。
如果Angular运行更改检测直到模型稳定,它可能会永远运行。如果Angular未运行更改检测,则视图可能不会反映模型的当前状态。
- 3 回答
- 0 关注
- 2113 浏览
添加回答
举报
0/150
提交
取消