You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular更新dataSource后Table搜索过滤器失效问题求助

Angular MatTable 虚拟滚动数据源过滤失效问题解决

问题原因

你在onChange函数里重新创建了TableVirtualScrollDataSource实例,但忽略了两个关键问题:

  1. 自定义过滤逻辑丢失:如果初始化时你给数据源设置过filterPredicate(用来处理嵌套对象group的字段过滤),重新创建实例后这个配置会被重置为默认值。默认过滤只会检查对象的顶层属性,无法匹配group内部的字段,导致输入查询时找不到匹配数据。
  2. 旧状态残留干扰:虽然你先清空了旧数据源的filter,但重新创建实例后,表格的过滤状态没有完全同步,导致输入之前用过的查询词时出现异常显示。

解决方法

方法一:避免重复创建数据源(推荐)

直接更新现有数据源的data属性,不用重新实例化,这样能保留原有的filterPredicate配置:

onChange(){
  this.dataSource.filter = '';
  // 对myData执行修改操作
  ...
  // 直接更新数据源数据,保留原有配置
  this.dataSource.data = this.myData;
}

方法二:重新创建数据源时同步过滤逻辑

如果必须重新实例化数据源,记得在创建后重新设置你的自定义filterPredicate:

// 假设你初始化时的自定义过滤逻辑是匹配group的name字段
onChange(){
  this.dataSource.filter = '';
  // 对myData执行修改操作
  ...
  this.dataSource = new TableVirtualScrollDataSource(this.myData);
  // 重新设置过滤逻辑,根据你的实际需求调整字段
  this.dataSource.filterPredicate = (data: GroupPerms, filter: string) => {
    return data.group.name.toLowerCase().includes(filter);
  };
}

额外检查

确认你的onSearch函数逻辑正确,过滤值的处理(去空格、转小写)没有问题,这个函数本身是正常的,问题出在数据源实例的配置同步上。

内容的提问来源于stack exchange,提问作者Reewen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:18:19