70X*_*70X 4 error-handling angular-material snackbar angular
我有一个错误自定义处理程序类,它实现了 Angular 5 核心的 ErrorHandler。如果发生错误,handleError 方法必须通知它发送显示的小吃栏材料组件。如果错误是在测试按钮中引发的,那么一切都很好。
如果错误发生在 ngOnInit 方法上,则小吃栏无法正常工作,并且它显示在页面的错误位置,并且您无法再将其关闭。
IE
我的组件:
导出类 RootPageComponent 实现 OnInit {
构造函数(){}
公共按钮测试(){
它.发生了;
}
ngOnInit() {
它.发生了;
}
}
这是我的自定义错误处理程序:
导出类 ErrorHandlerCustom 扩展 ErrorHandler {
构造函数(...){}
处理错误(){
const notificationService = this.injector.get(NotificationService);
// 使用 Snackbar 材料自定义通知
notificationService.ExceptionError(错误);
}
}
ngOnInit 中出现错误的结果: ngOnInit 错误
点击测试按钮: 点击测试按钮
我终于弄清楚了问题所在。我不知道这是否是正确的方法。
在很多情况下,错误处理程序将在 Angular 区域之外运行。这会导致 toast 行为不正确,因为更改检测不会在其上运行。因此,在正确的运行中使用区域是必要的。
this.zone.run(() => {
this.snackBar.open(消息, "撤消");
}
在这里,我找到了我的解决方案,并将其发布,以防其他人遇到同样的问题: https ://github.com/angular/material2/issues/9875