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

Primeng Table虚拟滚动如何获取当前页码适配后端分页接口

PrimeNG Table虚拟滚动+懒加载分页参数实现方案

两种实现方案都支持,不需要强制修改后端接口,按需选择即可:

方案1:自行计算页码传给后端(适配现有按页码分页的接口)

PrimeNG的onLazyLoad事件返回的参数中没有直接提供页码,但可以通过event.first和event.rows两个参数快速计算得到:

event.first:当前视口第一条数据的全局索引,从0开始计数
event.rows:单页加载的数据条数,对应你模板中配置的[rows]="20"

页码计算公式:
当前页码 = Math.floor(event.first / event.rows) + 1

你可以直接在请求参数中替换****** PAGE ******部分即可,修改后的请求代码示例:

onLazyLoad(event: LazyLoadEvent) {
  // 计算当前页码
  const currentPage = Math.floor(event.first / event.rows) + 1;
  const sortDir = event.sortOrder === -1 ? "desc" : "asc";
  // 注意:如果触发了排序/搜索,需要先清空原有users数组,避免数据叠加错乱
  if (event.sortField || this.searchQueryChanged) {
    this.users = [];
  }
  this.apiService.getUsers(this.searchQuery, event.sortField, sortDir, currentPage).subscribe(
    res => {
      if(res){
        this.users = this.users.concat(res.data);
      }
    }
  )
}

方案2:直接传event.first和event.rows给后端(符合PrimeNG原生设计)

你也可以选择修改前端传参,把偏移量和每页条数直接传给后端,后端用first作为查询偏移量、rows作为返回条数即可,这种方式不需要前端做页码计算,逻辑更简单,两种方案的分页效果完全一致。

注意事项

你当前模板配置了[resetPageOnSort]="true",当用户触发排序操作时,event.first会重置为0,此时需要先清空原有的users数组再追加新请求返回的数据,否则会出现排序后新旧数据混合错乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:57:03