Angular 2& RxJS - 从2个来源排序

时间:2016-12-19 21:33:21

标签: angular rxjs5

我有一个通过Observable从服务器返回的对象列表。该列表显示在带有ngFor的模板中。我还有一个下拉列表来排序列表。

当服务器返回列表时,我的排序正常工作,但现在我还尝试在选择comboBox时对列表进行排序。

如何从下拉列表和源中对流进行排序,而不必使用局部变量来存储数据?

示例代码:

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$'>

1 个答案:

答案 0 :(得分: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';