Tengo un componente principal (app.component) que realiza una solicitud http, asignando el resultado como this.stats y luego pasándolo como accesorio al elemento secundario (progression.component). mi problema parece ser que mi hijo está procesando antes de obtener datos del padre, lo que hace que el niño arroje errores y se rompa.
es decir, obtengo -> {} [[Prototipo]]: Objeto cuando registro el accesorio en mi componente secundario
Simplemente no tengo experiencia, pero dado que todos mis componentes usan ngOnInit () y están suscritos a observables, ¿supongo que el niño debería estar esperando que el padre termine? No estoy seguro de cómo puedo arreglar algo como esto, ya que existe en todos los componentes y no es un caso en el que pueda fusionar los observables que pensaría ... cualquier idea sería increíble :) ¡gracias!
componente principal
export class AppComponent { title = 'pctothemoon'; stats: any constructor(private specsService: SpecsService) {} ngOnInit(): void { this.specsService.getStats().subscribe((res)=>{this.stats=res}) } }componente hijo
export class ProgressionComponent { @Input() stats: any; oldStats: any; constructor(private specsService: SpecsService) { } ngOnInit(): void { this.specsService.getProgress().subscribe((res)=>{console.log(res)}) } AfterViewInit(){ this.specsService.postUpdates(this.stats).subscribe((res)=>{console.log("updated stats", res)}) } }como referencia, también incluiré mi service.ts para mostrar mis solicitudes http en segundo plano
export class SpecsService { private apiUrl = 'http://localhost:3000' constructor(private http:HttpClient) {} getStats():Observable<any>{ return this.http.get(`http://localhost:8888/fetchStats`) } postUpdates(stats):Observable<Object>{ //send stats to json server store const url = `${this.apiUrl}/progressionData`; //json server collection location return this.http.post(url,stats,httpOptions) + stats } getProgress(){ return this.http.get(`${this.apiUrl}/progressionData`) } }La respuesta es muy simple. Simplemente envuelva el componente secundario dentro de un *ngIf en su HTML:
<ng-container *ngIf="!!stats"> <app-child-component [stats]="stats"></app-child-component> </ng-container>La condición será que los datos que el niño necesita estén disponibles. Aquí, el componente secundario no se creará hasta que los datos estén disponibles.