Observables: Angular2 Родительское и детское общение

У меня есть angular2 форма, которая состоит из родительского компонента и нескольких дочерних компонентов. У меня есть ReplaySubject в моем сервисе, который генерирует, когда родитель должен что-то сохранить, а потомок подписывается на него и сохраняет его элементы. Родительский компонент должен знать, когда все дочерние элементы закончили сохранение. (Мы все еще будем в форме, когда будет сделано сохранение. Поэтому дети не могут отписаться.) Как мне этого добиться? Любая помощь будет принята с благодарностью. Спасибо

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.  ?
    );
}

1 ответ

Предполагая, что родитель имеет доступ к дочернему элементу в своем шаблоне, родительский компонент может прослушивать onSaved событие, которое отправляется дочерними компонентами после завершения сохранения.

В ChildComponent вы определяете выходное событие:

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

В родительском шаблоне вы затем прослушиваете это событие:

ParentComponent.html

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

ParentComponent.ts

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

Угловая документация для этого типа связи компонентов здесь.

На SO уже есть несколько хороших ответов - как этот

Другие вопросы по тегам