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

fys*_*ysp 6 javascript dependency-injection angular-http-interceptors angular2-services angular

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

  1. 来自 AppModule 组件的请求使用LoggerInterceptorUrlInterceptor
  2. 来自 LazyLoadedModule 组件的请求使用LoggerInterceptorUrlInterceptor以及FilterInterceptor

应用程序模块.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 {}
Run Code Online (Sandbox Code Playgroud)

延迟加载.module.ts

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

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

有什么想法吗?

Max*_*yák 1

我遇到了同样的问题,我的用例略有不同,但它可能对你有用。我的场景: - 我有一个与第三方集成的功能模块,该第三方 API 具有不记名令牌身份验证,因此我设置了拦截器。

如果您仅从功能模块提供拦截器,则不会调用它,同样,如果您从 AppModule 提供拦截器,它将起作用。

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

但是,您应该仔细测试重新导入 HttpClientModule 时,AppModule 中提供的拦截器仍然有效