У меня есть служба, которая предоставляет данные в реальном времени для нескольких компонентов прослушивания. Существует только один экземпляр службы, и он хранит своих слушателей внутри, используя класс 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);
}
}
}
Теперь все работает отлично. Но мне не нравится тот факт, что мне нужно создать собственный класс для хранения и уведомления слушателей. Мои интуитивные ощущения говорят мне, что что-то уже существует для этого.
Итак, это заставило меня задуматься, каков был бы угловой способ сделать это?