Я пытаюсь написать глобальный HTTP-перехватчик, который перехватывает все HTTP-ответы, проверяет ответы и (при соблюдении определенных условий) отображает снэк-бар.
Не могу показать, что снэк-бар отображается.Если я поставлю точку останова в строке .open (), я увижу, что на короткое время появляется закусочная, но без текста и смещения от центра.
Перехватчик:
import { Injectable, Injector, NgZone } from '@angular/core';
import {
HttpEvent,
HttpHandler,
HttpInterceptor,
HttpRequest,
HttpResponse,
} from '@angular/common/http';
import { Observable, of } from 'rxjs';
import { tap } from 'rxjs/operators';
import { MatSnackBar } from '@angular/material';
//import { of } from 'rxjs/observable/of';
@Injectable()
export class TMCErrorHttpInterceptor implements HttpInterceptor {
constructor(public snackBar: MatSnackBar,private injector: Injector, private zone: NgZone){}
/**
* @param HttpRequest<any> request - The intercepted request
* @param HttpHandler next - The next interceptor in the pipeline
* @return Observable<HttpEvent<any>>
*/
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const started = Date.now();
return next.handle(request)
// add error handling
.pipe(
tap(event => {
if (event instanceof HttpResponse) {
if (this.isError(event.body)){
this.handleError(event.body);
}
}
}, error => {
console.error('NICE ERROR', error)
})
);
}
isError(response: any): any {
return (typeof (response) == "object"
&& typeof (response.MESSAGE) != "undefined"
&& typeof (response.STATUS) != "undefined"
&& typeof (response.CODE) != "undefined"
&& response.STATUS === "error"
);
}
handleError(error: any): any {
this.snackBar = this.injector.get(MatSnackBar);
this.zone.run(() => {
this.snackBar.open("hiiiiii");
});
}
}
Я пытался вытащить зону, а не использовать инжектор.Без изменений.