【发布时间】:2017-08-02 08:41:36
【问题描述】:
您可以在下面看到我为可读性和清晰度而简化的代码:
connect(): Observable<Customer[]> {
const displayDataChanges = [
this._customerDatabase.dataChange,
this._filterChange,
this._sort.mdSortChange,
this._paginator.page
];
return Observable.merge(...displayDataChanges).map(() => {
let data = this._customerDatabase.data.slice();
data = this.getFilteredData(data);
data = this.getSortedData(data);
const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
return data.splice(startIndex, this._paginator.pageSize);
});
}
此方法将返回一个可观察的客户数组。
下面的部分定义了一个 Observables 数组:
const displayDataChanges = [
this._customerDatabase.dataChange,
this._filterChange,
this._sort.mdSortChange,
this._paginator.page
];
每次其中一个发出数据时,我都希望我的客户数组发生变化。 (当我加载数据时,当我的过滤器发生变化时,当我选择另一种排序机制时以及当我更改页面时)
然后我将所有这些合并在一起,以便我可以“组装”我必须返回的数据。如您所见,它的性能不是很好,因为它无法区分实际的 observable 发出的数据...
我如何做到这一点并确定哪个 observable 已更改? (下面的伪代码)
return Observable.merge(...displayDataChanges).map(() => {
**[ALWAYS]**
let data = this._customerDatabase.data.slice();
**[IF MY SORTING HAS CHANGED]**
data = this.getSortedData(data); /* After which i will change the dataSet */
**[IF MY FILTER HAS CHANGED]**
data = this.getFilteredData(data);
**[ALWAYS]**
const startIndex = this._paginator.pageIndex * this._paginator.pageSize;
return data.splice(startIndex, this._paginator.pageSize);
});
【问题讨论】:
标签: javascript angular typescript rxjs reactive-programming