gpt4 book ai didi

angular - 我如何使用 Angular Material 从服务中显示 MatSnackBar?

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:53 28 4
gpt4 key购买 nike

我正在使用:Angular V6.1.0,Angular Material V6.4.1

我正在 try catch HTTP 错误并使用 MatSnackBar 显示它们。我试图在我的应用程序的每个组件(有 http 请求的地方)中显示这一点。以免做重复代码

否则我应该在每个组件中重复相同的代码以显示插入了错误的 MatSnackBar。

这是我的服务:

import { Injectable } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';
// import { HttpClient, HttpErrorResponse, HttpRequest } from '@angular/common/http';
import { Observable, throwError, of, interval, Subject } from 'rxjs';
import { map, catchError, retryWhen, flatMap } from 'rxjs/operators';
import { url, ErrorNotification } from '../globals';
import { MatSnackBar } from '@angular/material';
import { ErrorNotificationComponent } from '../error-notification/error-notification.component';


@Injectable({
providedIn: 'root'
})
export class XhrErrorHandlerService {
public subj_notification: Subject<string> = new Subject();

constructor(
public snackBar: MatSnackBar
) {

}

public handleError (error: HttpErrorResponse | any) {
this.snackBar.open('Error message: '+error.error.error, 'action', {
duration: 4000,
});
return throwError(error);
}
}

最佳答案

用这个创建一个服务:

custom-snackbar.service.ts

import { Injectable, NgZone } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar';

@Injectable()
export class CustomSnackbarService {
constructor(
private snackBar: MatSnackBar,
private zone: NgZone
) {

}

public open(message: string, action = 'success', duration = 4000): void {
this.zone.run(() => {
this.snackBar.open(message, action, { duration });
});
}
}

MatSnackBarModule 添加到 app.module.ts:

import { MatSnackBarModule } from '@angular/material/snack-bar';

...
imports: [
BrowserModule,
AppRoutingModule,
MatSnackBarModule,
],
...

它还需要在 ngZone 中运行:https://github.com/angular/material2/issues/9875

然后在error-service.ts中:

public handleError (error: HttpErrorResponse | any) {
customSnackbarService.open(error, 'error')
return throwError(error);
}

关于angular - 我如何使用 Angular Material 从服务中显示 MatSnackBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53146071/

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