2016-08-08 8 views
2

Ich habe versucht, eine neue Rxjs Observable in einer Angular 2-Komponente mit TypeScript zu implementieren. Ich habe einen Dienst erstellt, MyService, die eine beobachtbare in eine seiner Methoden gibt, zum BeispielReactiveX JS und TypeScript - Wie kann ich mich abmelden?

export class MyService { 

    getMyObs(){ 
     return new Observable(observer => { 
      observer.next(42); 
     }); 
    } 
} 

Dann in meiner Angular 2 Komponente I dieser beobachtbaren abonnieren in OnInit zB

export class MyComponent implements OnInit { 
obs: any; 

constructor(private myService: MyService){};  

    ngOnInit { 
     this.obs = myService.getMyObs().subscribe(data => { 
      // Do stuff here... 
     }); 
    }  
} 

Die RxJs documentation spricht davon, dass Sie sich von Ihrer Beobachtungsstelle abmelden, sodass Ihre beobachtbare Person keine Nachrichten mehr an Ihren Beobachter senden kann. Deshalb dachte ich, sollte ich aus dem beobachtbaren werden abzumelden, wenn meine Komponente zerstört wird, so etwas wie

export class MyComponent implements OnInit, OnDestroy { 
obs: any; 

constructor(private myService: MyService){};  

    ngOnInit { 
     this.obs = myService.getMyObs().subscribe(data => { 
      // Do stuff here... 
     }); 
    } 

    ngOnDestroy { 
     this.obs.unsubscribe(); 
    } 
} 

Während dies macht Sinn für mich, wirft das Typoskript-Compiler (und in der Tat wirft die Anwendung) sagen es keine unsubscribe Methode . Es scheint keine solche Methode in den Typdefinitionsdateien zu geben. Wie kann ich eine Observable mit TypeScript korrekt abbestellen?

Antwort

3

Sie müssen Ihre Observableabmelden Methode hinzufügen., Disposing Observable Executions

return new Observable(observer => { 
    observer.next(42); 

    return() => { 
    console.log('unsubscribe') 
    } 
}); 
0

Sie können die Definition des unsubscribe Methode in der Subscription.d.ts (Klasse Subscription) des Rxjs Moduls.

In der Tat, Sie kündigen ein Abonnement und nicht eine beobachtbare.

0

Erstellen Sie zuerst das Abonnement wie folgt.

private obs: Subscription = new Subscription(); 

Dann zuweisen zu beobachtbaren.

this.obs = myService.getMyObs().subscribe(data => { 
     if(data !== null){ 
     this.obs.unsubscribe() 
     } 
    }); 
Verwandte Themen