如何将延迟加载模块中的拦截器添加到Angular 4/5上的应用程序拦截器数组?

时间:2018-01-31 14:22:47

标签: javascript angular dependency-injection angular2-services angular-http-interceptors

我有AppModuleLazyLoadedModule。我想从每个模块组件中得到的是:

  1. AppModule组件的请求使用 LoggerInterceptor UrlInterceptor ;
  2. LazyLoadedModule组件的请求使用 LoggerInterceptor UrlInterceptor 以及 FilterInterceptor
  3. app.module.ts

    @NgModule({
      bootstrap: [AppComponent],
      declarations: [
        AppComponent,
      ],
      imports: [
        CoreModule,
        HttpClientModule,
      ],
      providers: [
         {provide: HTTP_INTERCEPTORS,useClass: LoggerInterceptor,multi: true},
         { provide: HTTP_INTERCEPTORS, useClass: UrlInterceptor, multi: true }
      ],
    })
    export class AppModule {}

    懒惰loaded.module.ts

    @NgModule({
      declarations: [
        LazyLoadedComponent,
      ],
      providers: [
         { provide: HTTP_INTERCEPTORS, useClass: FilterInterceptor, multi: true }
      ],
    })
    export class LazyLoadedModule {}

    问题是当LazyLoadedModule延迟加载时,FilterInterceptor不包含到拦截器线程,就像从未注入过一样。

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我的用例略有不同,但它可能适合你。 我的情景: - 我有一个与第三方集成的功能模块,这个第三方API有承载令牌认证,所以我设置了我的拦截器。

如果您只提供功能模块中的拦截器,它就不会被调用,类似地,如果您从AppModule提供拦截器,它将起作用。

对我来说,修复是重新导入功能模块中的HttpClientModule并且它有效。

然而,您应该仔细测试,当重新导入HttpClientModule时,AppModule中提供的拦截器仍可正常工作