我正在 Angular 16 项目上创建一个新的拦截器,当尝试注入 MatSnackBar 时,出现以下错误:
NullInjectorError:NullInjectorError:没有 MatSnackBar 的提供者!
当 API 返回错误代码时,我需要打开小吃栏,并且我创建了小吃栏服务以使其更容易调用它,但尝试使用该服务或 MatSnackBar 本身,我遇到了相同的错误。
拦截器代码:
export const requisicaoErrosInterceptor = (
req: HttpRequest<unknown>,
next: HttpHandlerFn
): Observable<HttpEvent<unknown>> => {
try {
let matsnack = inject(MatSnackBar);
//let snackBarService = inject(SnackBarService);
} catch (error) {
console.log(error);
}
return next(req).pipe(
map((event: HttpEvent<any>) => {
return event;
}),
catchError((err: any) => {
if (err instanceof HttpErrorResponse) {
let mensagem = '';
if (err.status === 0) {
mensagem = 'mensagem-problemas-conexao';
}
return throwError(() => err);
}
})
);
};
我的提供者:
import {
HTTP_INTERCEPTORS,
provideHttpClient,
withInterceptors,
} from '@angular/common/http';
import { EnvironmentProviders, Provider } from '@angular/core';
import { requisicaoErrosInterceptor } from './interceptors/requisicao.erros.interceptor';
import { requisicaoInterceptor } from './interceptors/requisicao.interceptor';
export const provideAplicacao = (): Array<Provider | EnvironmentProviders> => {
return [
provideHttpClient(
withInterceptors([requisicaoErrosInterceptor])
),
{
provide: HTTP_INTERCEPTORS,
useValue: () => {},
multi: true,
},
];
};
使用基于类的拦截器
@Injectable()
export class RequisicaoErrosInterceptor implements HttpInterceptor {
constructor(private snackBar: MatSnackBar) {}
intercept(req: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>> {
// Your interceptor logic here...
}
}
然后在您的提供商列表中提供它
{
provide: HTTP_INTERCEPTORS,
useClass: RequisicaoErrosInterceptor,
multi: true
}