В моем шаблоне AppComponent у меня есть 3 дочерних компонента - HeaderComponent, MenuComponent, ContentComponent. Данные для дочернего компонента - MenuComponent динамически загружаются через HTTP-запрос. Если я сделаю HTTP-вызов через службу в ngOnInit или в конструкторе компонента, данные не будут загружены, и представление не будет отображать данные. Я хочу подождать, пока данные для меню вернутся как ответ, после того, как я сделаю HTTP-вызов, а затем отобразить MenuComponent с данными.
Я новичок в Angular, было бы очень здорово, если бы кто-то может предложить решение.
app.component. html
<div class="wrapper">
<app-header></app-header>
<app-menu></app-menu>
<app-content></app-content>
</div>
menu.component.ts
import { Component, OnInit } from '@angular/core';
import { MainMenuService } from "main-menu.service";
@Component({
selector: 'app-menu',
templateUrl: './menu.component.html',
styleUrls: ['./menu.component.scss']
})
export class MenuComponent implements OnInit {
mainMenuData;
constructor(public menuService: MainMenuService) { }
ngOnInit() {
this.mainMenuData = this.menuService.getDataforMenu();
}
}
menu.component. html
<nav>
<ul>
<li *ngFor="let mainMenu of mainMenuData">
<a class="main-menu" href="{{ mainMenu.href }}">{{ mainMenu.name }}</a>
</li>
</ul>
</nav>
main-menu.service.ts
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class MainMenuService {
menu;
constructor(private httpClient: HttpClient) { }
getDataforMenu() {
this.httpClient.get(URL).subscribe(
(response: any) => {
return response;
},
(error: any) => {
}
);
}
}