Невозможно отобразить панель данных материала для ошибок бэкэнда с помощью пользовательского ErrorHandler Angular 5 - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь показать материальную снэкбар для ошибок бэкенда в моем приложении 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);
  }
}

Это пример стекаблица, который показывает, что я имею в виду

Примечание:

Я обнаружил эту ошибку в нескольких вопросах, но не могу точносопоставить ответы на мой случай

1 Ответ

0 голосов
/ 15 мая 2018

Угловая загрузка ErrorHandler перед поставщиками, это причина вашей ошибки о циклической зависимости.

Поэтому вам нужно вручную ввести MatSnackBar, используя Injector, следующим образом:

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 , теперь он работает.

...