2016-04-08 5 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; 
} 

In Offizielle Angular 2 Typescript-Definition, scheint es keine Möglichkeit, EventEmitter stumm oder abmelden.Wie kann ich EventEmitter in Angular 2 abbestellen?

bekam ich Rückruf im Laufe der Zeit als Seiten die gleiche EventEmitter

+0

Zeigen Sie, wie Sie die Ereignis-Emitter verwenden stattdessen – Chrillewoodz

Antwort

17

EventEmitter Gegenstand erstreckt verwenden. Wenn Sie ein Thema abonnieren, erhalten Sie eine Subscription, die Sie später verwenden können, um sich abzumelden.

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

Hint
nicht EventEmitter für etwas anderes als @Output() s anwenden. Winkel garantiert nicht, dass EventEmitterSubject erstreckt halten oder sogar zu einem Subject in Zukunft ähnlich arbeiten.

+1

Hey, ich glaube, Ihr Hinweis in Kraft ist jetzt. Ich glaube, es ist jetzt unmöglich, den zurückgegebenen Wert abzubestellen, können Sie das bestätigen? –

+0

Es erstreckt sich nach wie vor Gegenstand in v5.x so dies noch funktioniert - https://github.com/angular/angular/blob/5.2.1/packages/core/src/event_emitter.ts#L10-L116 – mcgraphix

6

Da EventEmitter only be used to emit events from components lautet und daher nicht abonniert werden soll, muss Angular keine Möglichkeit zum Abbestellen bieten.

Wenn Sie keine Ausgabeeigenschaft in einer Komponente verwenden, verwenden Sie einen beobachtbaren oder einen Gegenstand anstelle eines EventEmitter.

Vielleicht sollten sie den Namen OutputPropertyEmitter ändern.