2016-11-05 13 views
5

は、いくつかのいずれかが同じのための一例 を提供することができます 方法RxJS subjectをAngular 2で作成するには?私は以下の私の角度成分で観察を作成することができています

... 
... 
import { Observable } from 'rxjs/Observable'; 
.. 
... 
let observable = new Observable(function subscribe(observer) { 
     observer.next(1); 
     observer.next(2); 
     observer.next(3); 
     observer.next(4); 
     setTimeout(() => {observer.next(5); },9000); 
    }); 

を述べた。しかし件名を作成する方法を認識していないのですか?

答えて

2

それは角度せずにそれを使用して違いはありませんRx.Subject角度を使用して、主な原理は同じですが、あなたは新しいインスタンスを作成する必要があり

const subject = new Rx.Subject(); 
const subscription = subject.subscribe(
    (data) => console.log(data), 
    (err) => console.log(err), 
() => console.log('Completed') 
); 

subject.next(1); 
subject.next(2); 
subject.next(3); 
subject.complete(); 
<script src="https://unpkg.com/@reactivex/[email protected]/dist/global/Rx.umd.js"></script> 

の下の例を見てRx.Subjectに登録し、必要な場所に登録してイベントを発生させます。ここで

10

はplunkerです:http://plnkr.co/edit/jLtFLjWrvHGI0ZPHl10B?p=preview

import {Subject} from 'rxjs/Subject'; 

@Injectable() 
export class MyService { 

    public invokeEvent:Subject<any> = new Subject(); 

    constructor() {} 
} 

は、観察可能なようにそれを購読する:

constructor(private _myService: MyService) { 
     this._myService.invokeEvent.subscribe((value) => { 
      console.log(value); 
     }); 
     } 

と次

ngAfterViewInit(){ 
     this._myService.invokeEvent.next(1); 
    } 
+0

で再び観察できるようにそれに値をプッシュし、私はかしら'Subject 'の上に' Injectable'を置くだけで本当にクラス全体が必要です。たぶん、Subjectの裸のインスタンスを 'providers'配列に押し込むことができますか? – Gherman

+0

@Ghermanあなたは通常、主題を共有サービスに入れているので、それらのすべてのために注入可能なものを作成する必要はありません。これは単なる例です。 – echonax

+0

私の共有サービスはただ1つのBehaviorSubjectとそれ以外のもので構成されています。私が必要とするものはすべてBehaviorSubjectに既に実装されています。だからむしろ、主題が1つに入れられるのではなく、それ自体で共有されたサービスでなければならないように思われる。私はちょうど状態を変更するか、またはそれを表示するコンポーネントの束を持っています。 – Gherman

関連する問題