我正在尝试创建事件广播服务。
以下是我想要实现的基本概念:
我知道我不能像这样从服务中调用组件的方法。我必须以某种方式返回可观察对象并从组件中调用它。我不确定如何实现这一点。
感谢任何建议。
以下是我想要实现的基本概念:
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(); // not possible to call component's method like this
}
}
);
}
}
我知道我不能像这样从服务中调用组件的方法。我必须以某种方式返回可观察对象并从组件中调用它。我不确定如何实现这一点。
感谢任何建议。
解决方案
感谢AngularFrance,以下是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);
}
}