2017-12-21 5 views
0

私はAngularJsで約束したようにAngular4でObserverを初めて使っています。私は2つのシナリオを理解したい:サービス経由でカスタム関数からObserverを返す:Angular 4

  1. UIをそれに応じて変更できるように関数から観察可能なものを戻す。

  2. UIに反映された関数からのデータの連続ストリームを返します。 proc.component.tsファイルで

    counter(){ 
        public counterObserver = Observable.create(obs => { 
        obs.next(increment()) 
        }); 
        return counterObserver; 
    } 
    
    increment(){ 
        setInterval(function(){ 
        count++ 
    },1000) 
    } 
    

    ngOnInit() { 
        this.initCounter(); 
    } 
    
    initCounter(){ 
        this.procSvc.counter.subscribe(count => this.count = count); 
    } 
    

    私は下記取得していますサービス(proc.svc.ts)ファイルで

は、私は、関数を作成しましたエラー:

Property 'subscribe' does not exist on type '() => void'.

+1

をインポート「カウンター」! – trichetriche

答えて

1

コードで問題があると思われる場合は、y OUは、あなたがたsetInterval()関数からプッシュ値以下で示される通りのように、ovserverにvlaueプッシュする持っているよりも、特定の間隔で値をプッシュする、それはもう一つの例のように、あなたともコード

const evenNumbers = Rx.Observable.create(function(observer) { 
    let value = 0; 
    const interval = setInterval(() => { 
    if (value % 2 === 0) { 
     observer.next(value); 
    } 
    value++; 
    }, 1000); 

    return() => clearInterval(interval); 
}); 
//output: 0...2...4...6...8 
const subscribe = evenNumbers.subscribe(val => console.log(val)); 

問題であり、その直接何も()が存在しない機能しないoberserverする加入するが、私は


の下に指摘したように、あなたにそののfuctionを小文字カウンタが関数であるとして、次のように試してみて、それはあなたのコードに問題があることは

のように思えます
initCounter(){ 
    this.procSvc.counter().subscribe(count => this.count = count); 
} 

あなたは今、無効意味し、空のようで、ここで

counter(): Observable<datatype>{ 

を戻り値の型を提供する必要があります。 、 `カウンタ()`を呼び出していない:または私は以下のようにデータ型が

public getData(path: string):Observable<any>{ 
    return this.http.get(path, options) 
     .map((response: Response) => response.json()) ; 
    } 

を知られていないときにaplyその

getData("val").subscribe(); 

に加入しないもあなたは機能を作成し

import { Observable } from 'rxjs/Observable'; 
+0

なぜ 'return()=> clearInterval(interval);' ??? – Samuel

+1

@Samuel - これはタイマを処理することです。あなたがこの機能よりもオブザーバを退会したときにあなたが作成したタイマーをクリアすることを意味します。ここでの例を確認してください:https://www.learnrxjs.io/operators/creation/create.html –

+1

@サミュエル - あなたはここに見ることができます:https://github.com/ReactiveX/rxjs/issues/76 –

関連する問題