使用AG Grid SSRM时startRow与endRow为何会出现undefined?
在使用AG Grid的Server-Side Row Model(SSRM)时,配置完成后每次获取到的startRow和endRow均为undefined。当前使用版本为27.2.0,升级到29.2.0可正常运行但现有依赖无法兼容,测试28.2.1版本时问题与27.2.0一致。
配置代码
数据源设置
onGridReady = (params: GridReadyEvent) => { this.gridApi = params.api; this.gridApi.setServerSideDatasource(this.createServerSideDatasource()); };
数据源实现
createServerSideDatasource(): IServerSideDatasource { return { getRows: (params) => { this.api.getTrades(params.request).subscribe({ next: (resp) => { params.success({ rowData: resp?.data ?? [], rowCount: resp?.totalRowCount, }); }, error: () => params.fail(), }); }, }; }
模板代码
<ag-grid-angular *ngIf="gridSettings.value && colDef; else loading" class="ag-theme-core-sdk ag-grid" [rowData]="rowData" [columnDefs]="colDef" [gridOptions]="gridSettings.value.gridOptions" [modules]="gridSettings.value.modules" (gridReady)="onGridReady($event)" > </ag-grid-angular>
Package.json依赖
{ "@ag-grid-community/angular": "27.2.0", "@ag-grid-enterprise/all-modules": "~27.2.0", }
解决方案
针对27.x/28.x版本的问题,可从以下几点排查修复:
移除模板中的
[rowData]绑定
SSRM模式下,AG Grid会通过配置的IServerSideDatasource获取数据,手动绑定rowData会强制Grid切换到客户端行模型,导致SSRM不生效,startRow和endRow自然不会被正确传入。需删除模板中的[rowData]="rowData"配置。确保GridOptions正确启用SSRM
检查gridSettings.value.gridOptions中是否配置了核心参数:rowModelType: 'serverSide', pagination: true, paginationPageSize: 50 // 按业务需求自定义每页行数27.x版本中必须显式设置
rowModelType: 'serverSide'才能激活SSRM,否则Grid默认使用客户端行模型。验证Modules包含SSRM模块
即使使用@ag-grid-enterprise/all-modules,仍需确保gridSettings.value.modules数组中包含ServerSideRowModelModule:import { ServerSideRowModelModule } from '@ag-grid-community/server-side-row-model'; // 模块数组中需包含该模块 modules: [ServerSideRowModelModule, ...其他模块]
完成以上调整后,getRows方法中的params.request.startRow和params.request.endRow即可正确获取分页参数。
内容的提问来源于stack exchange,提问作者Aleksei Baryshnikov

