2016-08-08 10 views
2

TypeScriptを使用してAngular 2コンポーネントに新しいrxjs Observableを実装しようとしました。私は、私はのOnInitにこの観測可能に加入する私の角度2の成分、例えばに続いてReactiveX JSとTypeScript - 購読を解除するには?

export class MyComponent implements OnInit { 
obs: any; 

constructor(private myService: MyService){};  

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

export class MyService { 

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

をその方法の一つに、観察を返すサービス、MyService、例えばを作成しましたRxJs documentationは、あなたの観測者があなたの観測者にメッセージをもはや放出しないことを知っているように、あなたの観測可能なものから脱会することについて話しています。そのため、私は私のコンポーネントが破棄されますときに私は、観測可能からこの一方で

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(); 
    } 
} 

のようなものを退会する必要があります考え出した私には理にかなって、何unsubscribe方法がないと言ってtypescriptですコンパイラは、スロー(そして実際にアプリケーションがスローされます) 。型定義ファイルにそのようなメソッドが記述されていないようです。 TypeScriptを使用してオブザーバブルから正しくサブスクライブを解除するにはどうすればよいですか?

答えて

3

あなたのObservable退会メソッドを追加する必要があります。、Disposing Observable Executions

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

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

あなたはRxjsモジュールのSubscription.d.ts(クラスSubscription)でunsubscribeメソッドの定義を見つけることができます。

実際には、サブスクリプションの購読を解除し、オブザーバブルを購読解除しないでください。

0

最初にサブスクリプションを作成します。

private obs: Subscription = new Subscription(); 

次にobservableに割り当てます。

this.obs = myService.getMyObs().subscribe(data => { 
     if(data !== null){ 
     this.obs.unsubscribe() 
     } 
    }); 
関連する問題