Ag-grid Нумерация на стороне сервера / фильтрация / сортировка данных - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь реализовать запрос со стороны сервера для разбивки на страницы / фильтрации / сортировки данных, но документация очень запутана.

В этом примере в модели бесконечной строки (https://www.ag -grid.com / javascript-grid-infinite-scrolling / # pagination ) для этого используется файл .json.В этом примере загружается весь файл .json с сервера, а затем используются клиентские функции (sortAndFilter(), sortData(), filterData()) для сортировки и фильтрации.Это не сторона сервера, а сторона клиента, потому что все данные полностью загружены с сервера.Если этот файл содержит 1 ГБ данных?

В сценарии реального мира мы не загружаем все данные с сервера (как в примере загружается весь файл json).Мы обращались к серверу каждый раз, когда пользователь щелкает следующую страницу, передавая параметры для страницы / фильтра и сортируя данные, загружая эти отфильтрованные / отсортированные данные и затем отображая их в сетке.

Чего мне не хватает?Ag-grid делает это иначе или я полностью потерялся?Любой простой пример с фиктивным сервером очень поможет.

Есть некоторые заявки на поддержку, открытые и закрытые (# 2237, # 1148 ...) без разъяснений.Я надеюсь, что кто-то прояснит это.

1 Ответ

0 голосов
/ 29 ноября 2018

Вам необходимо реализовать объект источника данных.Где нужно указать способ получения данных.А затем установите этот объект источника данных с помощью API сетки.

app.component.html:

<div style="display:flex; width:100%; height:100%; flex-direction:column; position:absolute;">

  <div style="flex-grow:0">
    <p>{{ info }}</p>
  </div>

  <div style="flex-grow:1; height: 1px;">
    <ag-grid-angular style="width: 100%; height: 100%" class="ag-theme-balham"
                      [gridOptions]="gridOptions"
                      [columnDefs]="columnDefs"
                      (gridReady)="onGridReady($event)"
                      #grid
    ></ag-grid-angular>
  </div>

</div>

app.component.ts

import { Component, HostListener, Input, ViewChild } from '@angular/core';
import { GridOptions, IDatasource, IGetRowsParams, ColDef } from 'ag-grid';
import { AgGridNg2 } from 'ag-grid-angular';
import { Observable } from 'rxjs';
import 'rxjs/add/observable/of';


@Component({
  selector: 'my-app',
  templateUrl: './app.component.html'
})
export class AppComponent {

  public columnDefs: any[];
  public rowData: any[];
  public gridOptions: any;
  public info: string;
  @ViewChild('grid') grid: AgGridNg2;

  constructor() {
    this.columnDefs = [
      { headerName: 'One', field: 'one' },
      { headerName: 'Two', field: 'two' },
      { headerName: 'Three', field: 'three' }
    ];

    this.gridOptions = {
      rowSelection: 'single',
      cacheBlockSize: 100,
      maxBlocksInCache: 2,
      enableServerSideFilter: false,
      enableServerSideSorting: false,
      rowModelType: 'infinite',
      pagination: true, 
      paginationAutoPageSize: true
    };

  }


    private getRowData(startRow: number, endRow: number): Observable<any[]> {
      //this code I'm included there only for example you need to move it to 
      //service
      let params: HttpParams = new HttpParams()
          .append('startRow', `${startRow}`)
          .append('endRow', `${endRow}`);

      return this.http.get(`${this.actionUrl}/GetAll`, {params: params})
          .pipe(
              map((res: any) => res.data)
          );
    }

    onGridReady(params: any) {
      console.log("onGridReady");
      var datasource = {
        getRows: (params: IGetRowsParams) => {
          this.info = "Getting datasource rows, start: " + params.startRow + ", end: " + params.endRow;

          this.getRowData(params.startRow, params.endRow)
                    .subscribe(data => params.successCallback(data));

        }
      };
      params.api.setDatasource(datasource);

    }

}

Это грубый пример вашего источника данных для сетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...