如何从Mat-table获取全页的已排序筛选后的数据?
解决MatTable获取全量筛选排序数据的方案
要拿到MatTable中所有页面、已筛选且已排序的全量数据,直接用你之前的两种方法都有局限,正确的做法是结合filteredData和sortData来处理:
核心代码
// 先获取经过筛选后的全量数据(不受分页影响) const filteredFullData = this.dataSource.filteredData; // 对筛选后的数据应用当前的排序规则 this.sortedData = this.dataSource.sortData(filteredFullData, this.dataSource.sort);
为什么之前的方法不行?
- 用
this.dataSource.connect().subscribe():connect()返回的是经过分页器处理后的数据流,所以只会拿到当前页的数据,而非全量。 - 用
this.dataSource.sortData(this.dataSource.data, ...):传入的dataSource.data是原始未筛选的数据,自然会忽略筛选条件返回全部内容。
额外说明
- 如果当前没有设置排序规则(
this.dataSource.sort为null),sortData会直接返回传入的筛选后数据,无需额外判断。 - 如果没有启用筛选,
filteredData就等于原始的dataSource.data,代码依然能正常工作。
内容的提问来源于stack exchange,提问作者Zwornik
相关产品推荐
相关产品推荐

