You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular AG Grid服务端分页:如何跳转到指定页面?

服务端分页下刷新保留页码的实现方案

核心思路

服务端分页模式下,AG Grid不会缓存全量数据,paginationGoToPage()仅能操作已加载的本地数据,因此无法直接生效。必须通过持久化当前页码 + 初始化时主动请求对应页数据 + 同步AG Grid分页状态的组合方式实现需求。

步骤1:持久化当前页码

在用户切换页码或编辑完成后,将当前页码保存到持久化存储,推荐两种场景适配的方式:

  • 路由参数(推荐):适合需要分享页面链接的场景,刷新或跳转后参数不会丢失。
  • LocalStorage/SessionStorage:适合无需分享链接,仅在当前浏览器会话保留的场景。

示例代码(路由参数方式):

// 监听AG Grid页码变化事件,同步到路由参数
onGridReady(params: GridReadyEvent) {
  this.gridApi = params.api;
  params.api.addEventListener('paginationChanged', (event) => {
    const currentPage = event.api.paginationGetCurrentPage();
    // AG Grid页码从0起始,业务通常用1起始,按需转换
    this.router.navigate([], {
      queryParams: { page: currentPage + 1 },
      queryParamsHandling: 'merge'
    });
  });
}

// 编辑完成后,更新当前页码到路由(若编辑后页码未变可省略)
onEditSuccess() {
  const currentPage = this.gridApi.paginationGetCurrentPage();
  this.router.navigate([], {
    queryParams: { page: currentPage + 1 },
    queryParamsHandling: 'merge'
  });
}

示例代码(LocalStorage方式):

// 页码变化时保存到LocalStorage
onPaginationChanged(event: PaginationChangedEvent) {
  localStorage.setItem('agGridCurrentPage', event.api.paginationGetCurrentPage().toString());
}

// 编辑成功后同步当前页码
onEditSuccess() {
  const currentPage = this.gridApi.paginationGetCurrentPage();
  localStorage.setItem('agGridCurrentPage', currentPage.toString());
}

步骤2:初始化时恢复页码并加载对应页数据

组件初始化阶段,读取保存的页码,默认回退到第1页(AG Grid对应0起始页码),然后调用服务端接口请求对应页数据,同步AG Grid的分页状态。

ngOnInit() {
  // 读取路由参数中的页码(转换为AG Grid的0起始格式)
  const pageParam = this.route.snapshot.queryParamMap.get('page');
  let targetPage = pageParam ? parseInt(pageParam) - 1 : 0;

  // 若使用LocalStorage,替换为以下逻辑:
  // const savedPage = localStorage.getItem('agGridCurrentPage');
  // let targetPage = savedPage ? parseInt(savedPage) : 0;

  // 请求服务端对应页数据,传入页码、每页条数等参数
  this.dataService.fetchPageData(targetPage + 1, this.pageSize).subscribe((res) => {
    // 设置AG Grid数据源
    this.gridApi.setRowData(res.dataList);
    // 设置总记录数,让AG Grid正确渲染分页控件
    this.gridApi.setRowCount(res.totalRecords);
    // 同步当前页码到AG Grid
    this.gridApi.paginationSetCurrentPage(targetPage);
  });
}

关键注意事项

  • 注意AG Grid的0起始页码与业务接口常用的1起始页码转换,避免请求错误页。
  • 服务端接口必须返回totalRecords(总记录数),否则AG Grid无法正确生成分页控件。
  • 若编辑操作导致当前页数据量变化(比如删除记录),需重新请求当前页数据,确保数据最新。
  • 路由参数方式需处理非法参数(如非数字页码),默认回退到第1页。

内容的提问来源于stack exchange,提问作者Indranil Bose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:50:23