I am trying to create an event broadcast service.
Here is a basic concept that I would like to achieve:
export enum Event {
EVENT_A,
EVENT_B, ...
}
@Injectable()
export class BroadcastService {
private broadcastSubject: Subject<Event> = new Subject<Event>();
public next(event: Event): void {
return this.broadcastSubject.next(event);
}
public subscribe(event: Event, componentCall: Function): void {
this.broadcastSubject.subscribe(
eventValue => {
if(event === eventValue) {
componentCall();
}
}
);
}
}
I know that I cannot call a component method from a service like this. I have to somehow observe and call it a component. I am not sure how to achieve this.
Thanks for any advice.
Decision
Thanks to AngularFrance , here is the solution for BroadcastService:
@Injectable()
export class BroadcastService {
private broadcastSubject: BehaviorSubject<Event> = new BehaviorSubject<Event>(0);
public next(event: Event): void {
return this.broadcastSubject.next(event);
}
public subject(event: Event): Observable<Event> {
return this.broadcastSubject.asObservable().filter(e => e === event);
}
}
source
share