// 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
запускается каждый раз, как функция конструктора, но ожидает инициализации дочерних компонентов. . - person Eggy   schedule 17.01.2016OnInit
предназначен для привязки, не сработает для вас ... попробуйтеCanReuse
- person Sasxa   schedule 17.01.2016EventEmitter
не предполагается использовать в службах, а только для@Output()
компонентов и директив. Вместо этого используйтеObservable
илиSubject
. - person Günter Zöchbauer   schedule 28.09.2016