angular - 对 Angular Material 表进行排序时,您可以在不修改数据的情况下查看数据吗?

标签 angular angular-material angular-material-7 angular-material-table

Angular Material 表利用名为 sortData() 的 MatTableDataSource 方法对表的数据源进行排序。 (https://material.angular.io/components/table/api#MatTableDataSource)。这是一个箭头函数:

sortData: ((data: T[], sort: MatSort) => T[])

我需要查看排序后的数据而不实际更改排序。例如,

this.dataSource.sortData = (sortData) => {
    console.log(sortData);
    return sortData;
};

这里的问题是我覆盖了 native 排序功能。 return sortData 返回原始数据,不进行任何排序。我想做的就是观察排序后的数据而不修改它。可以这样做吗?

最佳答案

您可以覆盖sortData函数:

this.dataSource.sortData = this.sortData;

...

sortData = function(data: any, sort: MatSort) {
  const active = sort.active;
  const direction = sort.direction;
  if (!active || direction == '') { return data; }

  const sorted = data.sort((a, b) => {
    let valueA = this.sortingDataAccessor(a, active);
    let valueB = this.sortingDataAccessor(b, active);

    // If both valueA and valueB exist (truthy), then compare the two. Otherwise, check if
    // one value exists while the other doesn't. In this case, existing value should come last.
    // This avoids inconsistent results when comparing values to undefined/null.
    // If neither value exists, return 0 (equal).
    let comparatorResult = 0;
    if (valueA != null && valueB != null) {
      // Check if one value is greater than the other; if equal, comparatorResult should remain 0.
      if (valueA > valueB) {
        comparatorResult = 1;
      } else if (valueA < valueB) {
        comparatorResult = -1;
      }
    } else if (valueA != null) {
      comparatorResult = 1;
    } else if (valueB != null) {
      comparatorResult = -1;
    }

    return comparatorResult * (direction == 'asc' ? 1 : -1);
  });

  console.log(sorted)
  return sorted;
}

如您所见,我几乎没有更改 original function 。根据您的需要添加删除的类型。

附:覆盖 MatTableDataSource 中的一些函数 is a common practise :

May be overridden for a custom implementation of data ordering.

关于angular - 对 Angular Material 表进行排序时,您可以在不修改数据的情况下查看数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60157669/

相关文章:

angular - 反转 mat-checkbox 的 "checked"值

javascript - Angular 2根据应用于div的类调用函数

angular - app.component.ts 中的 Ionic 3 登录和检查语句

angular-material - Angular Material 元素/字体对于桌面使用来说太大了

html - Angular Material 和输入类型 'time' ,值属性与 ngModel

当我尝试打开 Angular Material 对话框时出现 Angular7 Modal StaticInjectorError

angular - 如何使 Angular 垫表中的排序箭头始终可见?

javascript - Angular Directive(指令)上的正则表达式仅返回 false

angularjs - 将 ngMaterial 与 ngRoute 一起使用时出错

angular - 在 mat-dialog 中显示 mat-table