我面临一个问题,如果用户试图直接转到倒数第二页,检查模式下的网络选项卡会显示大量服务器请求来加载该页面数据。
重现步骤
基本上,它试图从 start 开始页面的偏移量,而不是从最后一页开始检查
Ag-Grid 版本:29.1.0
import { HttpClient } from '@angular/common/http';
import { Component } from '@angular/core';
import {
ColDef,
GridReadyEvent,
IServerSideDatasource,
RowModelType,
} from 'ag-grid-community';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-alpine.css';
import 'ag-grid-enterprise';
import { IOlympicData } from './interfaces';
declare var FakeServer: any;
@Component({
selector: 'my-app',
template: `<ag-grid-angular
style="width: 100%; height: 100%;"
class="ag-theme-alpine-dark"
[columnDefs]="columnDefs"
[defaultColDef]="defaultColDef"
[rowModelType]="rowModelType"
[pagination]="true"
[paginationPageSize]="paginationPageSize"
[cacheBlockSize]="cacheBlockSize"
[animateRows]="true"
[rowData]="rowData"
(gridReady)="onGridReady($event)"
></ag-grid-angular> `,
})
export class AppComponent {
public columnDefs: ColDef[] = [
{ field: 'id', maxWidth: 75 },
{ field: 'athlete', minWidth: 190 },
{ field: 'age' },
{ field: 'year' },
{ field: 'gold' },
{ field: 'silver' },
{ field: 'bronze' },
];
public defaultColDef: ColDef = {
flex: 1,
minWidth: 90,
resizable: true,
};
public rowModelType: RowModelType = 'serverSide';
public paginationPageSize = 10;
public cacheBlockSize = 10;
public rowData!: IOlympicData[];
constructor(private http: HttpClient) {}
onGridReady(params: GridReadyEvent<IOlympicData>) {
this.http
.get<IOlympicData[]>(
'https://www.ag-grid.com/example-assets/olympic-winners.json'
)
.subscribe((data) => {
// add id to data
var idSequence = 1;
data.forEach(function (item: any) {
item.id = idSequence++;
});
// setup the fake server with entire dataset
var fakeServer = new FakeServer(data);
// create datasource with a reference to the fake server
var datasource = getServerSideDatasource(fakeServer);
// register the datasource with the grid
params.api!.setServerSideDatasource(datasource);
});
}
}
function getServerSideDatasource(server: any): IServerSideDatasource {
return {
getRows: (params) => {
console.log('[Datasource] - rows requested by grid: ', params.request);
var response = server.getData(params.request);
// adding delay to simulate real server call
setTimeout(function () {
if (response.success) {
// call the success callback
params.success({
rowData: response.rows,
rowCount: response.lastRow,
});
} else {
// inform the grid request failed
params.fail();
}
}, 200);
},
};
}