Как отказаться от подписки на EventEmitter в 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;
}

в официальном определении Angular 2 Typescript, похоже, у него нет возможности отключить или отписаться от EventEmitter.

Я получил обратный вызов с течением времени, поскольку страницы используют один и тот же EventEmitter

2 ответов


EventEmitter расширяет тему. Когда вы подписываетесь на тему, вы получаете Subscription который вы можете позже использовать для отмены подписки.

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

подсказка
Не используйте EventEmitter для чего-нибудь еще, кроме @Output()s. Angular не гарантирует, что EventEmitter будет продолжать отодвигать Subject или даже работа, похожая на Subject в будущем.


потому что EventEmitters должны используется только для испускания событий из компонентов, и, следовательно, они не должны быть подписаны, нет необходимости в Angular, чтобы предоставить средство для отмены подписки.

Если вы не используете свойство вывода в компоненте, используйте Observable или Subject вместо EventEmitter.

возможно, они должны изменить имя на OutputPropertyEmitter.