Angular 角度5:根据条件隐藏ag网格行

Angular 角度5:根据条件隐藏ag网格行,angular,ag-grid,ag-grid-angular,Angular,Ag Grid,Ag Grid Angular,我从服务得到以下响应,当标志为真时,我必须隐藏整行(总共20列),否则显示它。如何在ag网格中实现这一点 data = { name: "A", flag: true }, { name: "B", flag: false }, { name: "C", flag: false } 我确实尝试了下面的useExternalFilter,然后我被困在了如何进一步使用这个useExternalFilter的问题上。谁能带

我从服务得到以下响应,当
标志为真时,我必须隐藏整行(总共20列),否则显示它。如何在ag网格中实现这一点

data = {
    name: "A",
    flag: true
   },
   {
    name: "B",
    flag: false
   },
   {
    name: "C",
    flag: false
   }
我确实尝试了下面的
useExternalFilter
,然后我被困在了如何进一步使用这个
useExternalFilter
的问题上。谁能带我过去吗

this.filterOptions = {
  useExternalFilter: true
};

this.gridOptions = {
  filterOptions:  this.filterOptions
 };

最简单的方法是,首先根据标志值过滤数据

const filteredData = this.data.filter(item => !item.flag);
然后将此过滤器数据设置为网格数据

this.gridOptions.setRowData(this.filteredData);

希望这将完成所需的

即使我们可以使用
api.setRowData(newData)
来显式地更新/删除您的数据,这种方法实际上会硬重置整个网格。根据报告,这将导致以下结果:

网格将丢弃所有以前的选择和过滤器,并完全删除 用新数据覆盖旧数据。这是第一次使用网格 这是最“暴力”的方式

因此,我建议您使用
transaction.remove
。根据,您可以提供
rowNodeId
来删除行,也可以使用基于对象引用的行来删除行

如前所述,首选此方法

网格保留所有活动的排序、分组和筛选,包括 更新以反映排序时数据的变化, 分组或筛选可能会受到影响

首先,我们可以得到需要删除的对象列表。然后,我们使用
api.updateRowData(transaction)
执行事务来更新行数据,以便删除这些行

const removeData = this.data.filter(item => item.flag);
this.gridApi.updateRowData({ remove: removeData });
我创建了一个示例来说明上述行为。

您想要的是:

this.gridOptions = {
  // is always present, so return true
  isExternalFilterPresent: function() { 
    return true; 
  },

  // return true if flag=true
  doesExternalFilterPass: function(rowNode) { 
    return rowNode.data.flag; 
  }
};

有关更多详细信息,请参阅

如果要更动态地进行筛选,可以使用bind方法

this.gridOptions = {
  // is always present, so return true
  isExternalFilterPresent: function() { 
    return true;
  }
}

ngOnInit() {
  this.gridOptions.doesExternalFilterPass = this.isVisible.bind(this)
}

isVisible(rowNode): boolean {
  // Write your logic. You can use rowNode and all component valiables.
}

@DilaniAlwis您的答案是100%正确:)我只是提供一个替代解决方案。