web-dev-qa-db-fra.com

Comment se désinscrire d'EventEmitter en Angular 2?

export declare class EventEmitter<T> extends Subject<T> {
    /**
     * Creates an instance of [EventEmitter], which depending on [isAsync],
     * delivers events synchronously or asynchronously.
     */
    constructor(isAsync?: boolean);
    emit(value: T): void;
    /**
     * @deprecated - use .emit(value) instead
     */
    next(value: any): void;
    subscribe(generatorOrNext?: any, error?: any, complete?: any): any;
}

Dans la définition officielle Angular 2 TypeScript, il semble qu'il n'y ait aucun moyen de désactiver ou de vous désabonner d'EventEmitter.

J'ai reçu un rappel au fil du temps car les pages utilisent le même EventEmitter

18
tom10271

EventEmitter étend le sujet. Lorsque vous vous abonnez à un sujet, vous obtenez un Subscription que vous pourrez ensuite utiliser pour vous désinscrire.

someOutput:EventEmitter = new EventEmitter();
...
this.subscription = someOutput.subscribe(...);
...
this.subscription.unsubscribe();

indice
N'utilisez pas EventEmitter pour autre chose que @Output() s. Angular ne garantit pas que EventEmitter continuera à étendre Subject ou même fonctionnera de manière similaire à un Subject à l'avenir.

38

Parce que EventEmitters devrait niquement utilisé pour émettre des événements à partir de composants , et donc ils ne devraient pas être abonnés, il n'est pas nécessaire de Angular pour fournir un moyen de se désinscrire).

Si vous n'utilisez pas de propriété de sortie dans un composant, utilisez un Observable ou un Subject au lieu d'un EventEmitter.

Peut-être qu'ils devraient changer le nom en OutputPropertyEmitter.

10
Mark Rajcok