У меня есть два модуля, каждый со своим перехватчиком:
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 ответ
Нет четкого смысла предоставлять их отдельными модулями, потому что если вы будете использовать ленивую загрузку, это просто не сработает, потому что HTTPClientModule уже запущен, когда вы пытаетесь установить перехватчик. Вот лонгрид по этому поводу: https://dev.to/devakone/angular-when-httpinterceptor-doesn-t-work-with-lazy-loaded-modules-3ipg
Похожие вопросы
Новые вопросы
angular
Вопросы об Angular (не путать с AngularJS), веб-фреймворке от Google. Используйте этот тег для вопросов Angular, которые не относятся к отдельной версии. Для более старой веб-инфраструктуры AngularJS (1.x) используйте тег AngularJS.