具有combineLatest初始值

时间:2017-07-30 15:12:03

标签: angular rxjs5 angular-material2

尝试使用ngrx store为angular2材质表创建一个DataSource。 https://material.angular.io/components/table/examples在排序示例中,当排序或数据发生更改时,它们直接访问_exampleDatabase数据。使用ngrx无法直接访问数据,因此我尝试使用rxjs运算符对数据进行排序。

export class ExampleDataSource extends DataSource<any> {
    constructor(private _sort: MdSort, private _storeData$: Observable<UserData[]>) {}

    connect(): Observable<UserData[]> {
        return Observable.combineLatest(this._storeData$, this._sort.mdSortChanage, 
            (data, sort) => {
                 // sorting logic here
                 return data;
            })
    }

一旦我更改排序顺序或调度新事件以更改商店中的用户数据,这都可以正常工作。我需要从每个显示中获取初始数据。是否有一个rxjs运算符,我想让它发生这种情况?或者是否有另一种更好的方法用于此方案。

我尝试过使用withLatestFrom和startWith,但两者都没有成功。

谢谢!

编辑:添加了一个在main.ts上显示问题http://plnkr.co/edit/5HOJSKKmdCuns2kvSirS?p=preview的plunkr。从combineLatest调用中删除eventEmitter时,将打印预期的消息。由于mdSort在点击之前不会发出事件,这可能导致我的问题。

Edit2:请参阅下面的Sergey评论以获得解决方案。工作plunkr也在评论中,因为我的声誉不够高,不能发布2个链接。由于事件发射器没有输出至少一个值,我需要在事件发射器上添加startWith并且它有效。

0 个答案:

没有答案