【问题标题】:changing routes quickly triggers ExpressionChangedAfterItHasBeenCheckedError (matsnackbar)快速更改路线会触发 ExpressionChangedAfterItHasBeenCheckedError (matsnackbar)
【发布时间】:2020-01-06 17:14:16
【问题描述】:

我有一个带有两条路线的导航栏。每条路由都将我带到一个组件,onInit 发出一个 http 请求以获取要在表格中显示的信息。如果 http 是 200 但没有信息,我会调用具有 matsnackbars 的 service,并发出 matsnackbar.open(blabla) 以显示“嘿,这里没有信息”的警报

问题是当我在这 2 条路线之间快速切换时,我得到了这个错误

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: '@state: undefined'. Current value: '@state: void'. It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?

我尝试将snackbar 调用放在其他一些生命周期挂钩中,但我得到了同样的错误或无限循环。

谢谢。

【问题讨论】:

  • 您尝试过使用哪些其他生命周期挂钩?并请发布您的模板和 ts 代码。

标签: angular angular-material angular6


【解决方案1】:

这通常是因为状态在ngOnInit 之前和ngOnInit 期间检查时发生了变化。我发现摆脱此警告的最简单方法是在一个小的超时时间内抛出该语句,以让ngOnInit 在打开对话框或发布小吃店消息之前完成。用户不会注意到它,它会让 Angular 正常工作。

ngOnInit() {
  // do stuff
  setTimeout(() => matsnackbar.open(blabla), 50);
  // do other stuff
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2020-01-30
    相关资源
    最近更新 更多