основной app.component запрашивает данные из веб-службы
затем он устанавливает переменную в службе с именем coreService , которая везде вводится для доступа к этим данным
проблема в том, что другие компоненты загружаются до того, как app.component получает информацию, поэтому я получаю тонны неопределенных проблем
Я не получаю данные из coreService, в противном случае веб-сервис вызывается несколько раз (пытался использовать условие и pipe (), но он не работает)
Я пытался использовать AfterViewInit, но он работает с перебоями
app.component:
ngOnInit() {
this.catalogService.getCampaign().then((data: any) =>
{
this.coreService.campaign=data;
});
}
products.component: (компонент загружен в роутер-розетку)
constructor(private coreService:CoreService)
{}
ngAfterViewInit()
{
Promise.resolve(null).then(() => { // to avoid value changed error b@#!t from angular
if(this.coreService.campaign)
{
... // we should be here
}
else
{
console.dir(this.coreService);
throw "campaign not loaded yet";
}
});
}
Я хочу, чтобы эти два компонента были синхронизированы, я имею в виду, что компонент products должен ждать, пока coreService получит свои данные
это не определено в цепочке:
@Injectable({
providedIn: 'root'
})
export class AppResolver implements Resolve<boolean> {
constructor(private catalogService: CatalogService, private coreService:CoreService) { }
public resolve(route: ActivatedRouteSnapshot): Promise<boolean>
{
return this.catalogService.getCampaign(CoreService.CAMPAIGN_IDENTIFIER,null).then((data: any) =>
{
this.coreService.campaign=data;
return true;
})
.then(function(result) : Promise<boolean>
{
// below this is undefined and throws an error
//////////////////////////////////////////////
return this.catalogService.getCampaign(CoreService.CAMPAIGN_IDENTIFIER,null).then((data: any) => {
this.coreService.campaign=data;
return true;
});
});
}
}