Angular5:在 ag-grid 中显示隐藏的行

Angular5: show hidden rows in ag-grid

下面是我的服务响应,页面加载后网格仅显示 resultyes 的那些行。现在,我的页面也有一个 show all 复选框,所以一旦选中该复选框,所有隐藏的行也应该是可见的,一旦我取消选中复选框,只有 [=14 的行=] 应该是可见的。如何实现此 show/hide 行功能?请指导。下面是我到目前为止的代码,我确实使用了 refreshCells 但它没有给我预期的结果。

    data = {
        name: "A",
        result: "no"
       },
       {
        name: "B",
        result: "no"
       },
       {
        name: "C",
        result: "yes"
       },
       {
        name: "D",
        result: "yes"
       }

    private gridApi;
    private dataCopy;

    constructor() {
      this.dataCopy = data;
    }

    this.gridOptions = {
      isExternalFilterPresent: function() { 
        return true; 
      },

      doesExternalFilterPass: function(rowNode) { 
        return rowNode.data.result = "yes"; 
      }
    };

    onGridReady(params) {
       this.gridApi = params.api;
    }

    //function call on checkbox click
    showAll(event) {
      if(event.target.checked) {
        this.gridApi.refreshCells(this.dataCopy); 
      }
    }

    //HTML
    <input type="checkbox" (change)=showAll($event)

关于您对 ag-grid 的 api.refreshCells() 的使用,我认为这不会导致网格更新行值,因为该方法的预期行为只会影响当前呈现的单元格,如 documentation.

中所述

您可以采用以下方法来update row nodes,并且有一些方法可以做到这一点。

1) 使用 one-way 数据绑定到 [rowData] 输入 属性 绑定。这适用于 Angular 和 React 等框架。您可以通过将复选框绑定到 change 事件来完成此操作。然后,我们创建您的数据的浅表副本,然后根据复选框选择 filter/assign 您的行数据值。我做了一个简短的演示 here.

<input type="checkbox" (change)="toggleCheckbox($event)"/>
.
.

ngOnInit() {
  this.dataCopy = [...this.rowData];
}

toggleCheckbox(event){
  if (event.target.checked) {
    this.rowData = this.dataCopy;
  } else {
    this.rowData = this.dataCopy.filter(obj => obj.result === 'yes');
  }
}

2) 使用 api.setRowData(newData).

3) 使用 api.updateRowData(transaction)。如果你想保持之前的网格状态,最好使用这种方法。