angular - 在 HTTP_INTERCEPTOR 中使用时,库中的 NGX Translate 会引发循环依赖错误
问题描述
我有一个角度库,我在其中创建了一个LanguageModule
定义如下
@NgModule({
imports: [
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
},
})
],
exports: [TranslateModule]
})
export class LanguageModule {
public constructor(translateSvc: TranslateService, http: HttpClient) {
translateSvc.onLangChange
.pipe(
switchMap((currentLang: LangChangeEvent) => zip(
of(currentLang),
http.get(`assets/i18n/${currentLang.lang}.json`),
))
).subscribe(([currentLang, localizations, syncfusionLocalization]) => {
translateSvc.setTranslation(translateSvc.currentLang, localizations, true);
setCulture(currentLang.lang);
});
translateSvc.use(translateSvc.getDefaultLang());
}
}
这允许我合并库和应用程序本地化文件。
在我的应用程序中,我LanguageModule
在 main中导入了app.module.ts
,我也在其中导入了 my CoreModule
,定义如下:
@NgModule({
imports: [
CommonModule,
HttpClientModule,
BrowserAnimationsModule,
...
],
declarations: [],
providers: [
....
// Http interceptors
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true
}
]
})
export class CoreModule {
public constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
if (parentModule) {
throw new Error('CoreModule has already been loaded. Import CoreModule in the AppModule only.');
}
}
}
在中AuthInterceptor
,如果我注入TranslateService
我得到以下错误:
Circular dependency in DI detected for InjectionToken HTTP_INTERCEPTORS.
我错过了什么?
解决方案
你的TranslateService
取决于HttpClient
,HttpClient
取决于HTTP_INTERCEPTORS
哪个包括AuthInterceptor
。
因此,当您添加TranslateService
为依赖项时,AuthInterceptor
您会得到一个完整的圆圈:TranslateService
=> TranslateLoader
=> HttpClient
=> AuthInterceptor
=> TranslateService
。
推荐阅读
- haskell - Haskell - 返回给定列表中大于 n 的数字
- java - 如何在java 8中将列表转换为具有设定值的地图
- ios - 在相机 iOS 上绘制叠加层
- reactjs - 在 ReactJS 项目中自动导入所有 *.scss
- c# - 从字符串中读取字符并计算每个字符
- javascript - 在不使用 INCLUDES 的情况下检查值是否存在于对象数组中
- terraform - 如何使用 terraform 中的 user_data 值更改 aws_instance?
- android - 错误:程序类型已存在:com.google.android.gms.internal.measurement.zzeb
- php - 将在多个字符串中找到的缩写转换为完整的单词 - PHP
- realm - Swift Realm - 'RLMException',原因:'只有由 Realm 管理的对象才支持更改'