Реализовано два HTTP-перехватчика, но вызывается только один - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два модуля, каждый со своим перехватчиком:

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, они работают оба.

1 Ответ

0 голосов
/ 15 апреля 2020

Нет четкого смысла предоставлять их в отдельных модулях, потому что, если вы будете использовать отложенную загрузку, это просто не будет работать, потому что HTTPClientModule уже запущен, когда вы пытаетесь установить перехватчик. Вот длинная статья об этом: https://dev.to/devakone/angular-when-httpinterceptor-doesn-t-work-with-lazy-loaded-modules-3ipg

...