// Part of service
public someEvent: EventEmitter<number> = new EventEmitter();
....
// Component
@Component({
selector: 'some-component',
template: `...`
})
export class SomeComponent {
constructor(public service: Service) {
this.service.someEvent.subscribe((x) => {
// Do something
});
}
}
SomeComponent
отображается в /
маршруте. Когда я перейду к другому маршруту в своем приложении и вернусь снова, SomeComponent
будет подписаться на событие снова, в результате чего обратный вызов будет срабатывать дважды. Как подписаться на мероприятие один раз или отказаться от подписки на уничтожение компонента и подписаться снова?Как подписаться на событие эмиттер один раз?
// Can't subscribe after.
ngOnDestroy() {
this.service.someEvent.unsubscribe();
}
Вы пробовали его с ngOnInit? – micronyks
@micronyks Да, я сделал, но не успел. Также в соответствии с [этим сайтом] (http://learnangular2.com/lifecycle/) 'ngOnInit' запускается каждый раз, как функция конструктора, но ждет инициализации дочерних компонентов. – Eggy
'OnInit' предназначен для привязки, а не для вас ... попробуйте [' CanReuse'] (https://angular.io/docs/ts/latest/api/router/CanReuse-interface.html) – Sasxa