javascript - 当服务器端对 ag-grid 中的列进行排序时,它从第一页开始请求
问题描述
在我使用无限滚动的网格中,我已经到达startRow: 400 and endRow: 450
,现在当我在这种情况下对列进行排序时,它应该将我在网格上的位置保持在我之前的块中,但在我的实现中,它让我回到startRow:0, endRow:50
不确定我在这里做错了什么:--
只有当我应用排序模型时,分页才能正常工作。
这是我的角度组件类中创建数据源的方法。我正在将我的其他参数与 agggrid 的 params.request 合并以调用 API:-
createDatasource(data: ActiveFiltersWithParams): Observable<IServerSideDatasource> {
const dataSource: IServerSideDatasource = {
// called by the grid when more rows are required
getRows: (params: IServerSideGetRowsParams) => {
data.startRow = params.request.startRow + 1;
data.endRow = params.request.endRow;
data.sortModel = params.request.sortModel;
var response = this.getGridData(data);
response
.pipe(takeUntil(this.unsubscribe$))
.subscribe(data => {
const immutableData: FundDetail = JSON.parse(JSON.stringify(data));
setTimeout(() => {
let lastRow = -1;
if (immutableData.totalRows <= params.request.endRow) {
lastRow = immutableData.totalRows;
}
if (immutableData.rows.length === 0) {
this.gridOptions.api.showNoRowsOverlay()
}
params.successCallback(immutableData.rows, lastRow);
}), 500
}, (err) => {
params.failCallback();
this.toastrService.error(err);
});
}
};
if (this.gridApi)
this.gridApi.setServerSideDatasource(dataSource);
return Observable.of(dataSource);
}
在这里我调用我的 createDataSouce 函数:-
this.etpScreenerService.activeFiltersForGridObs$
.pipe(switchMap((data) => {
if (data && Object.keys(data).length) {
if (this.gridOptions && this.gridOptions.api)
this.gridOptions.api.hideOverlay();
return this.createDatasource(data);
} else {
return Observable.empty();
}
}), takeUntil(this.unsubscribe$))
.subscribe((data) => {
}, err => {
this.toastrService.error(err);
});
这是 GridOptions 对象:-
gridOptions: GridOptions = {
// pagination: true,
rowModelType: 'serverSide',
cacheBlockSize: 20,
columnDefs: this.createColumnDefs(),
components: {
loadingCellRenderer: (params: any) => {
if (params.value !== undefined) {
return params.value;
} else {
return `<i class="fa fa-spinner fa-pulse fa-fw"></i><span>Loading...</span>`;
}
}
},
};
在我的模板中,我使用了几个这样的选项:--
<ag-grid-angular style="height: calc(100vh - 160px);" class="ag-theme-balham" [animateRows]="true"
[enableServerSideSorting]="true" [overlayLoadingTemplate]="overlayLoadingTemplate" [overlayNoRowsTemplate]="overlayNoRowsTemplate" [enableColResize]="true" [gridOptions]="gridOptions"
(gridReady)="onGridReady($event)"></ag-grid-angular>
解决方案
推荐阅读
- android - Can’t execute test with more than 2 devices when using Appium grid
- iis-7 - IIS 服务器配置 - 网站性能问题
- angular - 模态组件 BsModalRef 未以角度绑定到 ngOnInit
- extjs - 将大括号作为 ExtJS 文本字段中的值转义
- python - (重新)从“备份”表描述创建表
- javascript - Javascript:正则表达式中的异常“如果前面没有”
- python - Pandas:快速随机负采样
- sql - SSAS 表格中的不同流程模式如何工作?
- python - 仅在 x 和 y 之间的列表中打印数字
- c# - 多上下文 - 使用身份框架上下文和实体框架 DbContext 的正确方法