如何取消订阅Angular 2中的EventEmitter?

tom*_*271 20 rxjs eventemitter angular

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;
}
Run Code Online (Sandbox Code Playgroud)

在官方Angular 2 Typescript定义中,似乎没有办法静音或取消订阅EventEmitter.

随着页面使用相同的EventEmitter,我随着时间的推移得到了回调

Gün*_*uer 41

EventEmitter扩展了Subject.当您订阅某个主题时,您将获得一个Subscription以后可以用来取消订阅的主题.

someOutput:EventEmitter = new EventEmitter();
...
this.subscription = someOutput.subscribe(...);
...
this.subscription.unsubscribe();
Run Code Online (Sandbox Code Playgroud)

提示除了s之外,
不要使用EventEmitter其他任何东西@Output().Angular不保证EventEmitter将来会继续扩展Subject甚至工作Subject.


Mar*_*cok 11

因为EventEmitters 只应该用于从组件发出事件,因此不应该订阅它们,所以Angular不需要提供取消订阅的方法.

如果未在组件中使用输出属性,请使用Observable或Subject而不是EventEmitter.

也许他们应该将名称更改为OutputPropertyEmitter.

  • 你能告诉我如何在这个用例中使用Observable或Subject吗? (2认同)