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