代码之家  ›  专栏  ›  技术社区  ›  J. Doe

ag网格单元渲染器组件在数据更新时失去其单击能力

  •  0
  • J. Doe  · 技术社区  · 5 年前

    我有一个简单的角度组件,它实现了这样一个ag网格:

    <ag-grid-angular
      *ngIf="data"
      domLayout='autoHeight'
      class="ag-theme-material"
      suppressFieldDotNotation="true"
      [pagination]="true"
      [paginationPageSize]="5"
      [defaultColDef]="defaultColDef"
      [gridOptions]="gridOptions"
      [frameworkComponents]="frameworkComponents"
      [rowData]="data.rowData"
      [columnDefs]="data.columnDefs"
      (gridReady)="onGridReady($event)"
      (cellKeyPress)="onCellKeyPress($event)">
    </ag-grid-angular>
    

    然后我在其他需要显示网格数据的组件中使用这个组件。

    <shared-grid [data]="projectStore.datasetsGridData | async" (action)="onDatasetsTableAction($event)"></shared-grid>
    

    columnDefs rowData

    网格配置为使用 cellRenderer 在以下列之一中实现可单击元素的组件:

    <div (click)="doSomething()">...</div>
    

    我注意到对于那些网格数据( [data] input

    我认为这是由于不断刷新网格造成的,但我不是100%确定。如果是这样的话,有没有什么解决办法来阻止这种影响的发生?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Pratik Bhat    5 年前

    这个问题有两种可能的解决方案。

    1. refresh() 方法 组件并处理刷新逻辑,以便单元格渲染器 组件知道在有数据刷新时要做什么。这是一个 Handling refresh
      在你这么做之前 如果您 不调用。您必须手动调用 api.refreshCells() 每次为上述解决方案刷新数据时
      工作。更多关于这个的- Events causing refresh

    2. api.redrawRows() 每次数据更改时。思考 ngOnChanges

    如果要从头开始重新创建行,请使用重绘行。这个 如果更改了仅在 行是第一次创建的,例如:

    1. 行是否为全宽。
    2. 用于任何单元格的cellRenderer(在创建单元格时指定一次)。
    3. 通过回调为行指定不同的样式
      getRowStyle()或getRowClass()。

    示例- Redraw rows

    推荐文章