已实现两个HTTP拦截器,但只调用了一个

问题描述 投票:0回答:1

我有两个模块,每个模块都有自己的拦截器:

a.module.ts

//AInterceptor
@Injectable()
export class AInterceptors implements HttpInterceptor {...}

//a.module
@NgModule({
    imports: [
        CommonModule,        
        HttpClientModule,
    ],
    declarations: [
    ],
    providers: [
        {
            provide: HTTP_INTERCEPTORS,
            useClass: AInterceptors,
            multi: true
        }
    ],
    exports: []
})

b.module.ts

//BInterceptor
@Injectable()
export class BInterceptors implements HttpInterceptor {...}

//b.module.ts
@NgModule({
  imports: [
    CommonModule,
    HttpClientModule,
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: BInterceptors,
      multi: true
    }
  ],
  exports: [
  ]
})

我将它们导入我的app.module:

//app.module.ts
@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    AModule,
    BModule,
BrowserModule, AppRoutingModule],
  providers: [
  bootstrap: [AppComponent]
})

[如果两者都导入,则AInterceptor起作用(拦截请求),BInteceptor号。我分别测试了它们,它们工作正常。我想念什么?

更新:由于某种原因,如果我颠倒了app.module中的导入顺序,它们将同时起作用。

angular angular-http-interceptors angular-module
1个回答
0
投票

没有明确的要点在单独的模块中提供它们,因为如果您将使用延迟加载,则将无法正常工作,因为当您尝试设置拦截器时,HTTPClientModule已经启动。这是关于此的长篇文章:https://dev.to/devakone/angular-when-httpinterceptor-doesn-t-work-with-lazy-loaded-modules-3ipg

© www.soinside.com 2019 - 2024. All rights reserved.