【问题标题】:Angular 7 - Global HTTP Interceptor for whole ApplicationAngular 7 - 整个应用程序的全局 HTTP 拦截器
【发布时间】:2019-05-16 08:47:02
【问题描述】:

在我的app.module.ts 中,我注册了一个这样的 HTTP 拦截器:

providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: TokenInterceptorService,
      multi: true,
    },
  ],

但是,延迟加载模块发出的请求不使用拦截器。 它也仅在延迟加载模块中注册 HTTP 拦截器时才有效。

但我只想在app.module.ts 中提供一次。

关于如何做到这一点的任何想法?还是我必须在每个模块中提供它?

【问题讨论】:

  • 在声明拦截器时尝试使用@Injectable({ providedIn: 'root', }),并将其从提供程序部分中删除
  • 不起作用...从提供者中删除时,角度应该如何知道它是一个拦截器?
  • 确保您没有在惰性模块中导入 HttpClientModule。

标签: angular typescript lazy-loading angular7 angular-http-interceptors


【解决方案1】:

我认为在您的情况下发生的事情与this GitHub thread 也可以观察到类似的情况。 JB Nizet 在他的评论中也可能指的是同样的事情。

您很可能已将HttpClientModule 添加到您的LazilyLoadedModuleimports 数组中。因此它没有使用 InterceptorService。为了使它工作,只需从那里摆脱它。完成后,它将使用全局 HTTP 拦截器服务。


这里有一个Working Sample StackBlitz 供您参考。

【讨论】:

    猜你喜欢
    • 2020-06-29
    • 2018-01-19
    • 2019-08-03
    • 2023-03-13
    • 1970-01-01
    • 2018-07-08
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多