جاوااسکریپت - نمیتوان یک اسنکبار متریال برای خطاهای بکاند با استفاده از ErrorHandler سفارشی در Angular 5 نمایش داد
من در تلاش هستم یک اسنکبار متریال برای خطاهای بخش پشتی در برنامه Angular 5 خود نمایش دهم.
من چندین روش را امتحان کردم اما هیچکدام کار نکرد، به نظر میرسد که کلاس 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);
}
}
این یک مثال استکبلیتز است تا نشان دهم منظورم چیست
توجه :
من این خطا را در چندین سؤال پیدا کردهام اما نمیتوانم دقیقاً پاسخها را به مورد خود تطبیق دهم
پاسخ شماره ۱
انگولار قبل از فراهمکنندهها 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);
}
}
من استکبلیتز شما را تغییر دادهام، حالا کار میکند.
