【问题标题】:Angular ag-grid data loading from api从 api 加载角度 ag-grid 数据
【发布时间】:2020-11-17 10:38:52
【问题描述】:

我现在正在做一个从 api 获取数据并以角度 ag-grid 显示的项目。问题是从 api 获取数据需要很长时间。使用邮递员进行测试时,最多需要 5-15 秒才能得到回复。我考虑过使用延迟加载来分别请求每页的数据。

但是,我可能不得不一次又一次地重新调用 api 来显示每个页面中的数据,并且会遇到排序和过滤问题。我尝试搜索教程示例,但所有这些示例都已经在项目中使用 rowData 进行了测试。对我来说,我必须从 api 请求。我该怎么办?是api方面的问题吗?

目前,我正在考虑将来自 api 的数据请求分为两个阶段。一开始,我只会从 api 请求大约 20 行数据,并在 ag-grid 中显示。一旦数据加载到屏幕上,在后台,将进行一个新的 api 调用来调用所有数据,然后更新 ag-grid。有什么方法可以在 rowData 中的数据更改后立即自动更新 ag-grid?有什么推荐的方法吗?

附:我们还创建了 api,以便可以创建新的 api。

【问题讨论】:

标签: angular api lazy-loading ag-grid


【解决方案1】:

您可以使用 ag-grid 的 Infinite Row Model 功能实现此目的。只需检查文档即可清楚地了解如何配置它。我将引导您完成一些基本步骤,以使您了解如何实现这一点。

作为第一步,您需要在 gridOptions 中配置以下属性以及其他选项。

{
  rowModelType: 'infinite',
  cacheBlockSize: 20,
  datasource: myDataSource
}

这里的 cacheBlockSize 设置为 20,因为您从 API 获得的请求页面行数为 20。您可以根据自己的需要进行配置。

由于使用的是无限行模型,所以不能直接设置网格数据,需要使用数据源。

const myDataSource: IDatasource = {
    rowCount: null,
    getRows: (params: IGetRowsParams) => {
        yourApiRequestService.subscribe((data) => {
            let lastRow = -1;
            if (data.length <= params.endRow) {
                lastRow = data.length;
            }

            params.successCallback(data, lastRow);
        });
    }
};

我已经将此 myDataSource 设置为提供的 gridOptions 中的数据源属性。

配置这些将使网格在要显示时自动获取数据。希望这个答案对您有所帮助。

【讨论】:

  • 谢谢。我已经尝试过无限滚动。但问题是加载时间在 api 调用中。根据我的测试,当代码使用 http.get() 方法从 api 链接请求数据时,就会发生延迟。无限滚动仅在加载链接后可用。所以,目前我正在使用两个 api 链接。在页面加载时,我从单独的 api 调用数据,这些 api 调用的数据更少,因此加载时间更快,并在网格中显示。一旦我从第一个 api 获取数据,我就会从主 api 调用,然后更新网格。我也会试试你的方法。。谢谢。
猜你喜欢
  • 2018-01-13
  • 1970-01-01
  • 2019-07-25
  • 2017-06-10
  • 2019-06-06
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 2018-03-10
相关资源
最近更新 更多