Angular Material SnackBar 和自定义 ErrorHandler 来通知错误

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 错误

点击测试按钮: 点击测试按钮

70X*_*70X 6

我终于弄清楚了问题所在。我不知道这是否是正确的方法。

在很多情况下,错误处理程序将在 Angular 区域之外运行。这会导致 toast 行为不正确,因为更改检测不会在其上运行。因此,在正确的运行中使用区域是必要的。

    this.zone.run(() => {
        this.snackBar.open(消息, "撤消");
    }

在这里,我找到了我的解决方案,并将其发布,以防其他人遇到同样的问题: https ://github.com/angular/material2/issues/9875