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
相关产品推荐
相关产品推荐

