更改路线会快速触发ExpressionChangedAfterItHasBeenCheckedError(matsnackbar)

时间:2019-09-03 19:31:24

标签: angular angular-material angular6

我有一个导航条,其中有两条路线。每条路线都将我带到[Info]: Loading complete. [Info]: Listening for connections on 127.0.0.1, port 8080 Hello? [Info]: Type \'help\' for a list of commands and their descriptions/use > 进行http请求以获取要显示在表中的信息的组件。如果http是onInit但没有信息,我将呼叫具有200的{​​{1}},并发出service来显示警报,“嘿,这里没有信息“

问题是,当我在这2条路线之间快速切换时,会出现此错误

matsnackbar

我试图将Snackbar调用置于其他生命周期挂钩中,但出现相同的错误或无限循环。

谢谢。

1 个答案:

答案 0 :(得分:1)

这通常是因为状态从ngOnInit之前和ngOnInit期间被检查以来已经改变。我发现摆脱此警告的最简单方法是,在打开对话框或放置小吃栏消息之前,将语句置于较小的超时范围内,以使ngOnInit完成。这对于用户来说是不明显的,它将使Angular正确执行其工作。

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