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

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

0
Nemus 15 Апр 2020 в 18:21
Это может быть одной из причин angular.io/api/common/http/HttpInterceptor#usage. -примечания
 – 
Raj Karri
15 Апр 2020 в 18:53

1 ответ

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

0
Andrew Gura 15 Апр 2020 в 18:49