使用自定义ErrorHandler Angular 5无法显示后端错误的材料快餐栏

时间:2018-05-15 16:16:36

标签: javascript angular typescript angular-material angular5

我正在尝试在Angular 5应用程序中显示后端错误的材料快餐栏。

我尝试了多种方法,但没有一种方法,似乎ErrorHandler类需要一些特殊的方法来正确调用小吃吧。

有人可以建议如何处理吗?

我收到此错误:

Provider parse errors:
Cannot instantiate cyclic dependency! ApplicationRef ("[ERROR ->]"): in NgModule AppModule in ./AppModule@-1:-1
Evaluating main.ts

我的自定义ErrorHandler类是(没有导入):

@Injectable()
export class MyErrorHandler implements ErrorHandler {

  constructor(public snackBar: MatSnackBar) {}

  handleError(error) {
    const errorMsg = 'an error has happened';
    this.openSnackBar(errorMsg);
    }

  openSnackBar(message: string) {
      this.snackBar.open(message);
  }
}

This is a stackblitz example to show what I mean

注意:

我在多个问题中发现了这个错误,但我无法准确地将答案映射到我的案例

1 个答案:

答案 0 :(得分:2)

Angular在提供者之前加载ErrorHandler,这就是你的循环依赖错误的原因。

所以你需要使用Injector手动注入MatSnackBar:

import { Injectable, Injector } from '@angular/core';
import { MatSnackBar } from '@angular/material';

@Injectable()
export class MyErrorHandler implements ErrorHandler {

  private snackbar;
  constructor(private injector: Injector) {}

  handleError(error) {
    this.snackBar = this.injector.get(MatSnackBar);
    const errorMsg = 'an error has happened';
    this.openSnackBar(errorMsg);
  }

  openSnackBar(message: string) {
      this.snackBar.open(message);
  }
}

我修改了您的stackblitz,现在可以了。