首页 文章

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

提问于
浏览
1

我有一个错误自定义处理程序类,实现Angular 5核心的ErrorHandler . 如果出现错误,handleError方法必须通知它发送显示的快餐栏材料组件 . 如果在测试按钮中抛出错误,一切都很好 .

如果ngOnInit方法出现错误,则小吃栏无法正常工作,并且它显示在页面的错误位置,您无法再将其关闭 .

I.E.

我的组件:

export class RootPageComponent implements OnInit {

    constructor() {}

    public buttonTest() {
        it.happens;
    }
    ngOnInit() {
        it.happens;
    }
}

这是我的自定义错误处理程序:

export class ErrorHandlerCustom extends ErrorHandler {

    constructor(...){}
    handleError() {
        const notificationService = this.injector.get(NotificationService);
        // notification custom using snackbar material
        notificationService.exceptionError(error);
    }
}

ngOnInit错误的结果:ngOnInit error

点击测试按钮:click on test button

1 回答

  • 2

    我终于弄明白了这个问题 . 我不知道这是不是正确的方法 .

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

    this.zone.run(() => {
            this.snackBar.open(message, "UNDO");
        }
    

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

相关问题