angular - 防止 Ag-Grid 在数据(NgRx 存储)更改时重新渲染
问题描述
我使用 Ag-grid 和 NgRx Store 作为其数据源。数据在我的父组件中处理并通过 observable ( tableData
) 传递给我的表组件。
<div class="table-wrapper" *ngIf=tableData>
<ag-grid-angular
class="ag-theme-balham"
[columnDefs]="tableData.columnDefs"
[rowData]="tableData.rowData"
[defaultColDef]="defaultColDef"
[gridOptions]="gridOptions"
(gridReady)="onGridReady($event)"
(rowDataChanged)="onRowDataChanged($event)"
(cellClicked)="cellClicked($)"
>
</ag-grid-angular>
</div>
ag-grid 列包含复选框。当用户单击一个单元格时,会发出一个事件,该事件会更改应用程序的当前状态、单击的复选框和整个tableData
. 因此,UI 按预期反映了这些更改。
@Input tableData;
@Output cellValueChanged = new EventEmitter<>();
constructor() { }
onGridReady(params: any) {
this.gridApi = params.api;
this.gridColumnApi = params.columnApi;
setTimeout(() => {
this.gridApi.sizeColumnsToFit();
}, 1000);
}
cellClicked(event) {
...
this.cellValueChanged.emit({ data });
}
该解决方案的问题是整个表数据被重新加载。这会导致表格调整为 autoColumnWidth ,并且如果我一直向下滚动表格,则将滚动条重置为顶部状态。
使用
cellClicked(event) {
...
this.gridApi.updateRowData({ update: data });
}
就像一个魅力,但前提是我不更新应用程序状态。问题是,每次用户对表执行操作以保持前端和存储数据一致时,我都希望并且需要更新应用程序状态。
更新 AppState 后如何防止表格重新呈现?
解决方案
感谢您的帮助,我找到了解决方案。
使用 NGRX 或 RxJS 的第一步是使用 deltaRowMode。
我的代码的第二个问题是我正在动态创建 columnRefs。当我单击一个单元格时,不仅会重新计算 rowData,还会重新计算 columnRefs。这将导致网格的重置。
谢谢你的帮助!我学到了很多
推荐阅读
- javascript - 如何访问使用 vee-validate 验证的自定义输入组件上的错误计算属性?
- c# - 使用 Unity 注入实体框架连接字符串运行时
- arraylist - groovy 中的整数范围文字变成一个数组列表,其中一个元素是整数范围
- android - 原因:java.lang.UnsupportedOperationException:无法解析索引 4 处的属性:TypedValue{t=0x2/d=0x1010099 a=1}
- wpf - 同步位于不同 ItemsCollections 中的控件的大小
- c# - 如果节点存在,则检查xml c#
- c# - C# 中的插件架构,带有来自 Nuget 的 Open.XML 等外部 dll
- javascript - 将http更改为https网站时出现ckeditor错误
- rest - 在具有上下文路径的 Spring Boot 应用程序中使用 API 网关时,HATEOAS 路径无效
- css - Angular2禁用CSS捆绑