【发布时间】:2019-06-08 12:49:57
【问题描述】:
我有一个向多个监听组件提供实时数据的服务。该服务只有一个实例,它使用ListenerCollection 类在内部存储其侦听器。
@Injectable()
export class SomeService {
public listeners: ListenerCollection = new ListenerCollection();
}
ListenerCollection 在内部拥有一组侦听器。它有多种用途,其中之一就是这个特定的服务。
export class ListenerCollection {
private listeners: Set<any> = new Set<any>();
constructor() {}
public addListener(listener) {
this.listeners.add(listener);
}
public removeListener(listener) {
this.listeners.delete(listener);
}
public notifyListeners(param: any) {
const listeners: Iterable<any> = this.listeners.values();
for (const listener of listeners) {
listener(param);
}
}
}
现在,它运行良好。但我不喜欢我必须创建一个自定义类来存储和通知听众的事实。我的直觉告诉我,为此已经存在一些东西。
所以,这让我想知道,Angular 的做法是什么?
【问题讨论】:
-
您可以将 Subject 或 SubjectBehavior 用作 RxJs 中的 Observable,然后从您的 listeners 订阅它们。它们是高级别的观察者模式表示。
-
@CoveredEe 您能否详细说明一下这些对象之间的区别。 - 我没有问题让它工作。我的问题更多是关于 - 什么是最先进的方法,以及我可以期待什么陷阱。 - 我应该读一本关于 RxJs 的书吗?
-
@bvdb 在阅读整本书之前,请先阅读Angular RxJs guide