Angular 4.2.4 HttpInterceptor在共享模块的forRoot()中使用时不工作



我正在使用一个共享模块为Angular 4.2.4应用程序中的其他延迟加载模块提供组件和服务。

除了我注入的HttpInterceptor之外,一切都很好。

如果我把它添加到共享模块的forRoot()中,那么它就不会被注入到我的懒惰加载模块中的HttpCLient调用中。

如果我把它放在共享模块的常规provider:[]部分,它确实会被注入到我的懒惰加载模块中,但它不再被视为单例,而是为每个模块初始化。

有人知道为什么不起作用吗?

现在我只想允许拦截器有多个实例,但这最终不是我想要的。

共享.module.ts(在延迟加载中不工作)

@NgModule({
imports: [
CommonModule,
HttpClientModule,
],
declarations: [ ],
exports: [
CommonModule,
],
providers: [ ]
})  
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
HttpClient,
{
provide: HTTP_INTERCEPTORS,
useClass: JwtHttpInterceptor,
multi: true
}
]
};
}
}

shared.module.ts(在延迟加载中工作,但不是单例)

@NgModule({
imports: [
CommonModule,
HttpClientModule,
],
declarations: [ ],
exports: [
CommonModule,
],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: JwtHttpInterceptor,
multi: true
}
]
})  
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [
HttpClient
]
};
}
}

应用程序模块.ts

@NgModule({
declarations: [
AppComponent,
PageNotFoundComponent,
ShellComponent,
MenuComponent,
FooterComponent
],
imports: [
BrowserModule,
FormsModule,
AppRoutingModule,
SharedModule.forRoot()
],
providers: [ ],
bootstrap: [AppComponent]
})
export class AppModule { }

admin.module.ts(延迟加载模块)

@NgModule({
imports: [
CommonModule,
FormsModule,
SharedModule
],
declarations: [ ],
providers: [ ]
})
export class AdminModule { }

我在sharedmoduleforRoot上遇到了完全相同的问题

参见:

https://github.com/angular/angular/issues/20575

尝试从共享模块中删除HttpClientModule

最新更新