У меня есть «appService», который я использую для обработки взаимодействия между всеми моими компонентами (формами, навигацией и т. д.).
В моем сервисе есть много эмиттеров событий, на которые подписываются компоненты (показ результатов, выбранный элемент, отправленная форма и т. д.).
Когда отображается новое представление, оно подписывается на необходимые ему события appService. Теперь проблема в том, что когда я перехожу к другому представлению (форме), представление, которое больше не нужно, уничтожается, но его подписки по-прежнему вызываются...! Я считаю, что ссылки на все подписки и отказ от подписки явным образом представляют собой массивный шаблон для простой задачи. Что я делаю не так? как это упростить?
Пример кода:
export class VendorsForm {
constructor(private appService: AppServiceMain)
{
this.appService.onSearchResultSelected$.subscribe((selectedEntity) => {
//detailed view of this item
this.model = selectedEntity;
this.appService.setFormIsShowingDetail();
})
});
}
}
теперь в другом компоненте:
export class CustomersForm {
constructor(private appService: AppServiceMain)
{
this.appService.onSearchResultSelected$.subscribe((selectedEntity) => {
//detailed view of this item
this.model = selectedEntity; this.appService.setFormIsShowingDetail();
})
});
}
}
В качестве справки, вот служба и компоненты, вызывающие событие:
export class AppServiceMain {
public onSearchResultSelected$: EventEmitter<IEntity>;
setSelectedEntity(ent: IEntity)
{
this.formstate = states.EntitySelected;
this.onSearchResultSelected$.emit(ent);
}
компонент, вызывающий событие
export class ResultsComponent {
rowDblClick(ev$)
{
this.appService.setSelectedEntity(ev$.data);
}
Я ДЕЙСТВИТЕЛЬНО понимаю, как удалить эти подписки, если захочу. Проблема в том, что мои формы довольно большие и функциональные, и у меня есть множество нестандартных ссылок. Нет ли способа автоматически прекратить прослушивание, когда представление будет уничтожено? Я считаю, что вручную уничтожить все это довольно подвержено ошибкам.
ngOnDestroy
не работает для вас? Если вы пропустили: OnDestroy - person leovrf   schedule 01.08.2016