У меня есть модуль приложения, как показано ниже, и у меня есть служба запуска, которая будет извлекать основные данные перед загрузкой приложения. Когда я пытаюсь предупредить переведенный текст в сервисе запуска, он не работает. Но если я дам немного времени, то это сработает. Как узнать, сколько времени нам нужно дать. Я полагаю, что файлы переводов en.json, fr.json не загружаются ко времени, когда моя служба запуска звонила, чтобы получить переводы.
imports: [
// :CORE MODULE: //
BrowserModule,
BrowserAnimationsModule,
HttpClientModule,
**TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: (createTranslateLoader),
deps: [HttpClient]
}
}),**
FormsModule,
CommonModule, //<====added
//:3RD PARTY MODULE://
BootstrapModalModule,
//:APPLICTION MODULES: //
**AppLoadModule**, //Startupdata before APP loaded
AppRoutingModule,
FooterModule,
ErrorModule,
AccessDeniedModule,
NotFoundModule,
RouterModule.forRoot([]),
ToasterModule.forChild(),
],
Модуль загрузки
export function load(appLoadService: AppLoadService) {
return () => appLoadService.load();
}
@NgModule({
imports: [HttpClientModule],
providers: [
AppLoadService,
{
provide: APP_INITIALIZER,
useFactory: load,
deps: [AppLoadService],
multi: true
}
]
})
export class AppLoadModule {}
@Injectable()
export class AppLoadService {
constructor(
private httpClient: HttpClient,
private alertService: AlertService,
private injector: Injector,
private $localStorage: LocalStorageService,
) { }
public get router(): Router { //this creates router property on your service.
return this.injector.get(Router);
}
public get translate(): TranslateService { //this creates router property on your service.
return this.injector.get(TranslateService);
}
load(): Promise<any> {
console.log('1.App Loader: STARTED', new Date().toLocaleTimeString());
return new Promise(resolve => {
const promise = this.httpClient.get('assets/settings/config.json')
.subscribe(
res_config => {
setTimeout(() => {
this.translate.get('logout').subscribe((res: string) => {
alert(res); // Not Translating if I give setTimeOut Zero
});
}, 2000);