如何检查是否有人订阅了 Angular 中的 EventEmitter?

Tom*_*ski 6 angular

有一个事件发射器:

@Output() edit: EventEmitter<any> = new EventEmitter();
Run Code Online (Sandbox Code Playgroud)

如何检查是否有人订阅了 Angular 中的 EventEmitter?

Chr*_*ert 4

AngularEventEmitter是一个 RXJS Subject

class EventEmitter<T> extends Subject<T>
Run Code Online (Sandbox Code Playgroud)

检查是否有订阅者/观察者

Subject.observed: bool-- 如果有 1 个或多个订阅者则为 true

RXJS 源代码

/**
 * A Subject is a special type of Observable that allows values to be
 * multicasted to many Observers. Subjects are like EventEmitters.
 *
 * Every Subject is an Observable and an Observer. You can subscribe to a
 * Subject, and you can call next to feed values as well as error and complete.
 */
export class Subject<T> extends Observable<T> implements SubscriptionLike {
  ...

  private currentObservers = new Map<number, Observer<T>>()

  get observed() {
    return this.currentObservers.size > 0;
  }
Run Code Online (Sandbox Code Playgroud)

笔记

  • 不要使用 an EventEmitter,而是考虑BehaviorSubjector ReplaySubject

请参阅:委托:Angular 中的 EventEmitter 或 Observable

  • 我正在使用这种技术,但我有这个“弃用”警告:“内部实现细节,不要直接使用。将在 v8 中成为内部的。” 有人知道如何更换这个吗? (6认同)
  • @Tonio:使用“.observed”。 (4认同)