重新加载数据后在Ag-grid中保持选择状态

时间:2019-03-20 13:12:31

标签: angular ag-grid

为了记录,它在Angular 7中

令人惊讶的是,没有太多信息。我有一个小snafu的“工作”。通常,我要命中端点以每N秒获取快照数据。我不能保证数据中的任何内容:每次都可能是一个全新的集合。可能是一样的。可能是相同数据,但顺序不同。用户可能已经选择了一些行,并且需要在重新加载数据后以编程方式重新选择它们。

以下有问题的代码。因此,除了在n ^ 2处效率非常低外,它还可以工作,但是临时取消选中行的“闪烁”。在重新选择循环完成之前,是否有办法阻止渲染?

我很想听到其他处理重选策略。由于在getMessages()中我将rowData放回原处,因此节点ID完全不同,因此仅按每个ID进行搜索并重新选择将不起作用。如果我错了请纠正我。

  reselect(selectedRows: Array<any>): void {
    for (const selectedRow of selectedRows) {
      this.gridApi.forEachNode( node => {
         if (node.data.id1 === selectedRow.id1 && node.data.id2 === selectedRow.id2) {
           node.setSelected(true);
         }
      });
    }
  }

  getMessages(): void {
    this.volumeService.getData()
      .subscribe(data => {
        let selectedRows: Array<any> = new Array<any>();
        if (this.gridApi !== undefined) {
          selectedRows = this.gridApi.getSelectedRows();
        }
        this.volumeDataWrapper = data;
        // Reselection needs to happen outside of this callback
        timer(0).subscribe( () => { this.reselect(selectedRows); });
      })
  }

1 个答案:

答案 0 :(得分:0)

  

在重新选择循环完成之前,是否有办法阻止渲染?

至于显示渲染在重新选择循环完成之前被阻止,此答案可以为您提供帮助。
您可以使用showLoadingOverlay中的gridApi

getMessages(): void {

  this.gridApi.showLoadingOverlay(); // <-

  this.volumeService.getData()
  .subscribe(data => {
    let selectedRows: Array<any> = new Array<any>();
    if (this.gridApi !== undefined) {
      selectedRows = this.gridApi.getSelectedRows();
    }
    this.volumeDataWrapper = data;
    // Reselection needs to happen outside of this callback
    timer(0).subscribe( () => { 
     this.reselect(selectedRows);
     this.gridApi.hideOverlay(); // <-
    });
  })
}