0

Ich habe eine angular2 Form, die aus einer übergeordneten Komponente und wenigen untergeordneten Komponenten besteht. Ich habe ein ReplaySubject in meinem Dienst, das ausstrahlt, wenn der Elternteil etwas speichern muss und die Kinder es abonnieren und seine Elemente speichern. Die Elternkomponente muss wissen, wann alle Kinder gespeichert haben. (Wir werden immer noch in der Form sein, wenn das Sparen getan ist. So können die Kinder sich nicht abmelden.) Wie erreiche ich das? Jede Hilfe würde sehr geschätzt werden.Observables: Angular2 Parent untergeordnete Kommunikation

Dank
Parent component 
---------------------- 
ngOnInit() { 
    // TODO: listen to child events and check if respose from all children received ?? 
} 
save() { 
    console.log("Saving elements on parent component"); 
    this.formService.save$.next(this.job.id); 
} 

Child 1 
---------------- 
ngOnInit() { 
    this.formService.save$.subscribe(() => 
     console.log("Save elements on child1 component"); 
     // TODO: some event from here to say child 1 is done saving. ? 
    ); 
} 


Child 2 
---------------- 
ngOnInit() { 
    this.formService.save$.subscribe(() => 
     console.log("Save elements on child2 component"); 
     // TODO: some event from here to say child 2 is done saving. ? 
    ); 
} 

Antwort

0

die Eltern Unter der Annahme, Zugriff auf das Kind hat darin Vorlage ist, könnte die übergeordnete Komponente für ein onSaved Ereignis hören, die von den untergeordneten Komponenten abgegeben wird, wenn sie Speicher beendet haben.

Im ChildComponent würden Sie ein Ausgabeereignis definieren:

@Output() onSaved = new EventEmitter<any>();

In der übergeordneten Vorlage, die Sie dann auf dieses Ereignis hören:

ParentComponent.html

<child-component (onSaved)="childSaved()"></child-component>

ParentComponent.ts

onSaved() { // Action when all child components have indicated save is completed }

Angular Dokumentation für diese Art von Kommunikation ist Komponente here.

Es gibt auch einige gute Antworten auf SO bereits - wie this one

+0

Aber wie wissen wir, dass wir die Antwort von allen Kindern bekam – Josf

+0

Sie haben würde, dass in der 'onSaved' Methode verfolgen - vermutlich unter Verwendung eines Zählers/Inkrementieren, um zu ermitteln, wie oft diese gespeicherte Funktion aufgerufen wurde. –

+0

Ok. Vielen Dank. Ich frage mich, ob es eine ausgeklügelte Möglichkeit gibt, dies mit rxjs zu tun – Josf

Verwandte Themen