2016-04-08 8 views
7
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からAngular 2の登録を解除するにはどうすればよいですか?

ページは

+0

代わりにイベントエミッタを使用している方法を表示 – Chrillewoodz

答えて

17

持つEventEmitterは、件名拡張同じ持つEventEmitterを使用するように私は時間をかけて、コールバックを得ました。あなたがサブジェクトを購読するときには、Subscriptionがあります。後でサブスクライブすることができます。

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

ヒント
は、他の何かが、@Output()秒間EventEmitterを使用しないでください。 Angularは、が今後延長されることを保証するものではなく、Subjectと同様に動作することを保証するものではありません。

+1

あなたのヒントが現在有効であると思います。戻り値からの退会は今では不可能だと私は信じています、あなたは確認できますか? –

+0

v5.xではまだSubjectが拡張されているため、これは引き続き動作します - https://github.com/angular/angular/blob/5.2.1/packages/core/src/event_emitter.ts#L10-L116 – mcgraphix

6

EventEmittersはonly be used to emit events from componentsである必要があります。したがって、それらを購読するべきではないため、Angularが購読を解除する手段を提供する必要はありません。

コンポーネントで出力プロパティを使用していない場合は、EventEmitterの代わりにObservableまたはSubjectを使用します。

名前をOutputPropertyEmitterに変更する必要があります。

関連する問題