Я ищу событие прокрутки в ag-grid, я хочу знать, когда прокрутка достигает конца и загружает следующий набор строк, я знаю, если вы установите режим бесконечной прокрутки, тогда ag-grid вызывает метод getRows, но в мое приложение я не получаю сразу следующий набор строк, я делаю вызов на сервер и сервер отправляет клиенту отдельное сообщение с новым набором строк
Есть ли событие onScroll для ag-grid?
Ответы (3)
Существует событие сетки под названием «onBodyScroll», к которому вы можете прикрепить обработчик событий. Это событие несколько секретно, так как его не было в их типе GridOptions до версии 18, хотя оно и работает. см. этот комментарий: https://github.com/ag-grid/ag-grid-enterprise/issues/89#issuecomment-264477535
У них есть это событие в документе: https://www.ag-grid.com/javascript-grid-events/#miscellaneous
Вы должны быть в состоянии сделать это (загрузить данные с сервера) в соответствии с приведенным ниже примером.
Прежде всего, определите свой dataSource
.
const dataSource: IServerSideDatasource = {
getRows: (params: IServerSideGetRowsParams) => this._getRows(params, [])
};
this.gridApi.setServerSideDatasource(dataSource);
Объявите метод _getRows
следующим образом.
private _getRows(params: IServerSideGetRowsParams, data: any[]) {
this.gridApi.showLoadingOverlay();
service.getData(params) // the payload your service understands
.subscribe((result: any[]) => {
params.successCallback(result, -1);
params.failCallback = () => console.log('some error occured while loading new chunk of data');
this.gridApi.hideOverlay();
},
error => this._serverErrorHandler(error)
);
}
Это в значительной степени самоочевидно. Дайте мне знать, если вам что-то непонятно.
Кстати, я использовал typescript
для примера, пример javascript
будет примерно таким же для ag-grid-реакция
Углубившись, я нашел идеальное решение этой проблемы.
Обратите внимание, здесь я использую AngularJS, но его очень легко понять.
onBodyScroll:function(params) {
var bottom_px = $scope.gridOptions.api.getVerticalPixelRange().bottom;
var grid_height = $scope.gridOptions.api.getDisplayedRowCount() * $scope.gridOptions.api.getSizesForCurrentTheme().rowHeight;
if(bottom_px == grid_height)
{
alert('Bottom')
}
},