我创建了新的拦截器名称HttpInterceptor
。
这是示例代码:
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor,
HttpResponse,
HttpErrorResponse,
} from '@angular/common/http';
import { Observable } from 'rxjs';
import { ErrorHandler } from './error_handler';
@Injectable()
export class RequestInterceptor implements HttpInterceptor {
constructor(
public errorHandler: ErrorHandler,
) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).do((event: HttpEvent<any>) => { }, (err: any) => {
if (err instanceof HttpErrorResponse) {
this.errorHandler.handleError(err);
}
});
}
}
我已在app.module.ts中添加了提供程序
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: RequestInterceptor,
multi: true,
}
]
我收到此错误。
错误:StaticInjectorError(AppModule)[InjectionToken HTTP_INTERCEPTORS -> ErrorHandler]:StaticInjectorError(平台:核心)[InjectionToken HTTP_INTERCEPTORS-> ErrorHandler]: NullInjectorError:没有为ErrorHandler提供程序!
我在Angular 7中的代码。请帮助我。
答案 0 :(得分:0)
在根目录中添加ErrorHandler
,如果不添加提供程序,则不能直接使用任何服务,因此在6+版本之后,它们引入了可以在模块根目录中添加的新语法。
因此您可以在整个应用程序中使用该服务。
例如,
@Injectable({
providedIn: 'root'
})
export class ErrorHandler{
}
还要在模块的根目录中添加RequestInterceptor
@Injectable({
providedIn: 'root'
})
export class RequestInterceptor implements HttpInterceptor{
}