Я знаю, как поднять событие с помощью EventEmitter. Я могу также прикрепить метод, который будет вызываться, если у меня есть компонент, как это:Как подписаться на мероприятие на службе в Angular2?
<component-with-event (myevent)="mymethod($event)" />
Когда у меня есть компонент, как это, все прекрасно работает. Я переместил некоторую логику в службу, и мне нужно поднять событие изнутри Службы. То, что я сделал это:
export class MyService {
myevent: EventEmitter = new EventEmitter();
someMethodThatWillRaiseEvent() {
this.myevent.next({data: 'fun'});
}
}
У меня есть компонент, который необходимо обновить некоторое значение, основанное на этом событии, но я не могу заставить его работать. То, что я попытался было это:
//Annotations...
export class MyComponent {
constructor(myService: MyService) {
//myService is injected properly and i already use methods/shared data on this.
myService.myevent.on(... // 'on' is not a method <-- not working
myService.myevent.subscribe(.. // subscribe is not a method <-- not working
}
}
Как мне сделать MyComponent подписаться на событие, когда услуга, которая поднимает его не является компонентом?
Я на С 2.0.0-alpha.28
EDIT: Модифицированная мой «рабочий пример» на самом деле работает, поэтому фокус может быть поставлен на не-рабочей части;)
Пример код: http://plnkr.co/edit/m1x62WoCHpKtx0uLNsIv
Это может быть больше вопрос дизайна, как услуга не должны испускать события от имени компонент, так как это тесно связывает службу с компонентом. например, что, если есть несколько экземпляров компонента, должны ли они все испускать события в этом случае? –
@jhadesdev Я тебя читал. Я сделал редизайн решения, поэтому службе больше не нужно испускать результат. Я по-прежнему думаю, что некоторые проекты не могут быть связаны с возможностью поднять события - в зависимости от того, какая «услуга» это ... –
в одном случае может возникнуть необходимость создания компонента вместо источника службы, а затем передать событие-эмитент в качестве аргумента для службы –