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 уже есть несколько хороших ответов - как этот