【问题标题】:Angular http client interceptors not known in lazy loaded feature module延迟加载功能模块中未知的 Angular http 客户端拦截器
【发布时间】:2019-04-25 09:03:30
【问题描述】:

我们在 Angular 中制作了一个拦截器。这个是通过核心模块中的 forRoot() 导出的。 app 模块使用 forRoot() 导入这个核心模块。

在延迟加载的功能模块中,拦截器是未知的。

我们如何解决这个问题?

http客户端模块在app模块中只导入一次。

【问题讨论】:

  • 您是否提供了您的拦截器,以便它在将要使用的模块上可用?
  • 拦截器应该用在所有模块上。它在核心模块中提供了一个forRoot方法,只有app模块导入核心模块。
  • 我没有明白你的意思,通过使用 forRoot 提供它。 AFAIK 您应该将其提供为 { 提供:HTTP_INTERCEPTORS,useClass:InterceptorClass,multi:true }。另外,您是否尝试直接在 AppModule 上提供它?
  • 我使用了 HTTP_INTERCEPTORS, multi: true... 构造。它是在 CoreModule.forRoot() 中设置的
  • 我建议你:在 AppModule 上提供它,或者在延迟加载的模块上导入核心模块,或者将拦截器移动到共享模块并在任何需要的模块上导入它。

标签: angular angular-http-interceptors


【解决方案1】:

你必须在每个 LazyLoaded 模块中导入你的 coreModule 才能从它的服务和组件中受益

要使您的服务单例,您需要在 AppModule 中使用 .forRoot 导入 coreModule,在每个 lazyLoaded 模块中导入不带 .forRoot,

所以如果它是你的主模块:

    @NgModule({
     imports: [
      ...
      CoreModule.forRoot()
    ],

如果是延迟加载的模块

@NgModule({
     imports: [
      ...
      CoreModule
    ],

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 2018-05-22
    • 2018-05-17
    • 2018-03-17
    • 1970-01-01
    • 2020-05-24
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多