gpt4 book ai didi

javascript - 无法使用自定义 ErrorHandler Angular 5 为后端错误显示 Material snackbar

转载 作者:行者123 更新时间:2023-11-30 14:36:33 25 4
gpt4 key购买 nike

我正在尝试为我的 Angular 5 应用程序中的后端错误显示一个 material snackbar。

我尝试了多种方法,但都没有用,似乎 ErrorHandler 类需要一些特殊的方法才能正确调用 snackbar。

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

我收到这个错误:

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

注意:

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

最佳答案

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

因此您需要使用 Injector 手动注入(inject) 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 , 现在可以了。

关于javascript - 无法使用自定义 ErrorHandler Angular 5 为后端错误显示 Material snackbar ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50354895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com