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

Angular 14数据过滤分类问题:点击All/类型仅展示P状态&step01数据

解决方案

问题根源

现有代码的核心问题是:下拉选择时直接基于全量原始数据过滤,未强制保留status='P'和step='01'的固定条件;同时初始化代码存在笔误(his.dataSource应为this.dataSource,stap应为step)。

1. 修正初始化代码并提前过滤基础数据

在获取数据时,先筛选出符合status='P'且step='01'的数据集,后续所有操作都基于这个子集处理,同时修正笔误:

// 组件类中新增属性声明
baseData: any[] = [];

// 初始化数据逻辑
this.prhd.getPr_prhds()
  .subscribe({
    next: data => {  
      // 先过滤出符合基础条件的数据
      const baseFilteredData = data.filter(s => s.status === 'P' && s.step === '01');
      this.dataSource.data = baseFilteredData;
      this.baseData = baseFilteredData; // 保存基础过滤后的数据集
      this.dataSource.sort = this.sort;
      this.dataSource.paginator = this.paginator;
      // 从符合条件的数据中提取type选项,避免无效类型
      this.typeOptions= _.uniq(baseFilteredData.map( (item:any) => item['type']));          
      this.typeOptions = ["All"].concat(this.typeOptions);
    }
  });

2. 修改下拉选择事件处理函数

基于提前过滤好的baseData进行类型筛选,确保始终符合status和step条件:

onChange($event:any){
  const selectedValue = $event.value.toLowerCase();
  if(selectedValue === "all"){
    this.dataSource = new MatTableDataSource(this.baseData);
  } else {
    const filteredData = _.filter(this.baseData, (item) => {
      return item.type.toLowerCase() === selectedValue;
    });
    this.dataSource = new MatTableDataSource(filteredData);
  }
  // 重新绑定排序和分页,保证功能正常
  this.dataSource.sort = this.sort;
  this.dataSource.paginator = this.paginator;
}

效果说明

  • 默认状态和选择"All"时,仅展示status='P'且step='01'的全部数据
  • 选择具体类型时,在符合基础条件的数据集中进一步筛选对应类型
  • 下拉选项仅包含符合基础条件的数据类型,避免无效选项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:15:08