2016-10-25 14 views
0

私は、オブザーバブルにバインドできるカスタムコンポーネントを記述しようとしていますが、オブザーバブルの状態に基づいて入力と表示/非表示の要素を渡すことができます。私は何をできるようにしたいと思いますがのようなものです:観測可能なサブスクリプションで関数を実行

this.observable.let((o: Observable) => { 
    // run logic. 
    return o; 
}); 

しかし、この:

@Input() observable: Observable<any>; 
ngOnInit() { 
    this.observable.onSubscribe(() => { 
     // show element, run logic on start; 
    }); 
    this.observable.onCompleteOrNext(() => { 
     // hide element, run logic on end; 
    }); 
} 

rxjsのドキュメント上で注いだ後、私はletと私のような何かができることを発見しましたちょっとしたハックのように思えますし、観測が完了したら何かを実行する方法もわかりません。私は、オブザーバブルがHTTPリクエストなどの非同期であることを期待していますが、このコンポーネントはどちらの方法でも処理する必要があります。完成に観察するために

、私はdo機能で、以下のような何かを行うことができるだろうと想定:do機能は、これはなっていない、観察可能な作成時に定義されていない限り

this.observable.do(() => { 
    // run logic when observable completes. 
    // not getting called. 
}); 

しかし、と呼ばれる。

私は、Angular2ではビューを直接オブザーバブルにバインドすることができますが、ビュー要素の表示/非表示だけでなく、オブザーバブルビューに基づいてロジックを実行する必要もあります。

私のgooglefooは失敗していて、rxjsのドキュメントはあまり啓発されていませんが、これはかなり簡単なことです。おそらく私はそれが間違っていると思います。あなたは、ChildComponentへの参照を取得し、観察を購読すると、キーのフックメソッドを呼び出すためにViewChildを使用することができ、親コンポーネントで

export class ChildComponent { 
    onSubscribe(){} 
    onNext(){} 
    onComplete(){} 
} 

+0

たぶん私は何かが欠けていますが、なぜ単に '(サブスクライブしていない)' 'ngOnInit'で、右が' next'、 'ERROR'と' complete'コールバックを指定しますか? – BeetleJuice

+0

さて、私は、このコンポーネントが観測可能なものを購読しないようにしたいと思います。データが返されたもの。それは他の加入者に基づいた状態にあると考えられます。それは理にかなっていますか? – Blunderfest

+0

それは意味があります。どこに登録しますか?親コンポーネントですか? – BeetleJuice

答えて

1

あなたは子コンポーネント内のフックメソッドを提供することができポイント:

  • あなたは
  • を購読したらときに観察発する
  • トンを彼は観測可能な完了

です。

export class ParentComponent { 
    @ViewChild('child') child:ChildComponent; 
    ... 
    this.observable.subscribe(
     next => this.child.onNext(), 
     err => {}, 
     () => this.child.onComplete() 
    ); 
    this.child.onSubscribe() 
} 

Live demo

+0

これは本当に良い提案です、私はそれと少し別のルートを取ることにしました。私は周りを回るobservablesのラッパーを作成しています。実装が完了すると、私は共有します。 – Blunderfest

関連する問題