拦截器 Angular 16 上出现 NullInjectorError

问题描述 投票:0回答:1

我正在 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,
        },
    ];
};
angular typescript interceptor angular16
1个回答
0
投票

使用基于类的拦截器

@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
}
© www.soinside.com 2019 - 2024. All rights reserved.