2016-12-19 10 views
0

Observableを介してサーバーから返されたオブジェクトのリストがあります。そのリストはテンプレートにngForで表示されます。リストをソートするためのドロップダウンもあります。角2とRxJS - 2つのソースからソート

サーバーがリストを返すときにソートが正常に動作していますが、現在はコンボボックスが選択されているときにソートしようとしています。

データを格納するためにローカル変数を使用する必要はなく、ドロップダウンとソースからストリームを並べ替えるにはどうすればよいですか?

サンプルコード:

let sortButton$ = new Subject(); 
let sortProp = 'myProperty'; 

this.handleSortButton(sortProp) { 
    sortButton$.next(sortProp); 
} 

// how can I retain my Observable and sort the values from the server when 
// a) the values come back from server (works with below) 
// b) the sort dropdown sends a new property value via the subject 
this.test$ = Observable 
       .of(['one', 'two', 'three']) 
       .map((data) => _.sortBy(data,this.sortProp)); 

テンプレート:

<div *ngFor='let item of test$'> 

答えて

2

あなたが使用することができcombineLatest

this.test$ = Observable 
    .of(['one', 'two', 'three']) 
    .combineLatest(this.sortButton$.startWith(this.sortProp)) 
    .map(([data, sort]) => _.sortBy(data,sort)) 

それをインポートすることを忘れないでください:

import 'rxjs/add/observable/combineLatest'; 
import 'rxjs/add/operator/startWith'; 
関連する問題