2017-05-20 11 views
1

説明:私は現在、Angular2Angular4が、今私が推測する)を使用していますリロード観察可能な使用Angular2

。私はconstructorthis.policyService.getBaseCommission().subscribe(response => response)サービスに加入しています。このデータは、同じページのフォームから更新することができます。

問題:私は手動でページを更新しなくても、そのサブスクリプションをリフレッシュするデータをリロードしてhtmlに表示できるようにしたい

。 SOのいくつかの答えはRCのソリューションについて語りました。私は4.0です。私はdbにレコードを追加し、既に購読されているデータをリフレッシュできるようにしたい。

質問:

どのようにページをリロードすることなく、データを更新することができていますか?どうすれば私の購読者が別の要求を発し、それに応じてAngular2を更新することができますか?私がこれまで試してみました何

これは仕事をしながら、私は再び加入することだし、多くのリフレッシュに、私は新しいサブスクリプションを毎回作成することがあります - 少なくとも、私はそれが本当だと思います。 ..私はヨーヨーの開始時にgetBaseCommissionを呼び出し、各フォームのアップデートでそれを呼びたい理解できるように

constructor() { this.reloadData(); } 

reloadData() : void { 
    this.policyService.getBaseCommission().subscribe(response => response) 
} 

// this gets called from the form on the page and should reload data 
createPolicy() : void { 
    this.policyService.anotherServiceCall().subscribe(response => { 
     this.reloadData(); 
    }); 
} 
+0

私はリフレッシュを取得していない...データをリロードしたいときはいつですか?いくつかのイベントまたはいくつかの時間間隔の後またはいつ?なぜ? lpl問題の詳細説明.. –

+0

インラインフォームの完成時に 'createPolicy'が呼び出されました@HimanshuBansal – Phil

+0

ちなみにAngular 4は実際にはあなたのpackage.jsonを実際に更新していますか?それ以外の場合は角度は2です。 – Muirik

答えて

0

。あなたはストリームとしてフォームの更新をモデル化することができます。

this.formUpdates 
    .switchMap(() => { 
    return this.policyService.anotherServiceCall(); 
    }) 
    .startWith('initial') 
    .switchMap((x) => { 
    return this.policyService.getBaseCommission(x); 
    }) 
    .subscribe((commission) => { 
    this.commission = commission; 
    }); 

注の使用:

formUpdates = new Subject<any>(); 

書き込みあなたがanotherServiceCall

this.formUpdates.next(); 

を呼び出し、その後手数料をリロードする必要があり、このストリームへstartWithフォームを更新する前にinitにコミッションをロードする必要があります。

this plunkerを確認してください。