У меня есть угловая библиотека, в которой я создал 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
в основной app.module.ts
, где я также импортирую свой 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.
Что мне не хватает?
TranslateModule.forRoot({})
все еще должен быть создан в проекте, который импортирует библиотеку. Также полезно, если вы хотите объединить несколько файлов i18n вместе. один из вашей библиотеки и один из вашего локального проекта - person Raphaël Balet   schedule 09.07.2021injector
или переместив компоненты в другой модуль, см. этот stackoverflow.com/questions/67152273/ (похоже, ваша проблема) - person Eliseo   schedule 09.07.2021