Angular 7:类型“ Observable <httpevent <any >>”上的属性“ do”不存在

时间:2018-12-19 10:52:17

标签: angular rxjs angular7

我创建了新的拦截器名称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中的代码。请帮助我。

1 个答案:

答案 0 :(得分:0)

在根目录中添加ErrorHandler,如果不添加提供程序,则不能直接使用任何服务,因此在6+版本之后,它们引入了可以在模块根目录中添加的新语法。

因此您可以在整个应用程序中使用该服务。

例如,

@Injectable({
    providedIn: 'root'
})
export class ErrorHandler{
}

还要在模块的根目录中添加RequestInterceptor

@Injectable({
        providedIn: 'root'
})
export class RequestInterceptor implements HttpInterceptor{
}