为什么“ Angular Data Table Schematic”连接方法对源阵列数据进行两次操作?

时间:2019-07-02 03:32:37

标签: javascript node.js angular typescript rxjs

命令ng generate @angular/material:material-table --name=data-table 生成一个connect()方法,如下所示:

  /**
   * Connect this data source to the table. The table will only update when
   * the returned stream emits new items.
   * @returns A stream of the items to be rendered.
   */
  connect(): Observable<DataTableItem[]> {
    // Combine everything that affects the rendered data into one update
    // stream for the data-table to consume.
    const dataMutations = [
      observableOf(this.data),
      this.paginator.page,
      this.sort.sortChange
    ];

    return merge(...dataMutations).pipe(map(() => {
      return this.getPagedData(this.getSortedData([...this.data]));
    }));
  }

我不确定这到底是做什么的,但是它在合并中传递给this.data并传递给getSortedData()。好像在做两次相同的工作?只是好奇实现在做什么以及是否有更有效的方法来做到这一点?

例如,可以不仅首先执行connect的实现: -对数组排序 -切片排序结果以获取页面 -返回可观察页面?

目前尚不清楚合并的目的是什么。

1 个答案:

答案 0 :(得分:1)

当合并中的三个可观察对象中的任何一个发出时,合并即发出,map函数将忽略合并所发出的任何值,因此,编写此合并符的人仅使用它创建了一个在分页器或排序更改时触发的事件发射器。没有observableOf(this.data),它将不会发出第一个值,但是看到它会忽略observableOf / of可能包含的任何参数,或者它们可能使用了startsWith。