切换分页每页条目数时,如何正确计算当前页码?
分页切换每页条数时的正确页码计算逻辑
问题出在你当前的页码计算方式:用旧页码乘以旧每页条数再除以新每页条数取整,这种方式会导致切换回来时页码偏移。正确思路是基于当前显示的第一条记录位置计算新页码,无论怎么切换每页条数,都能保持起始记录位置一致,符合预期逻辑。
正确计算步骤
- 先算出当前页面的第一条记录序号(从1开始计数,比如示例中第6页每页10条时,第一条是51):
const firstItemIndex = (this.page - 1) * this.itemsPerPage + 1; - 用起始序号计算切换新每页条数后的页码:
this.page = Math.ceil(firstItemIndex / newItemsPerPage); - 处理边界情况:如果计算出的页码超过总页数,就设为最后一页。
修正后的完整代码
itemsPerPageChanged(newItemsPerPage) { // 计算当前页面的第一条记录序号(从1开始) const firstItemIndex = (this.page - 1) * this.itemsPerPage + 1; // 更新总页数 this.totalPages = Math.ceil(this.totalItems / newItemsPerPage); // 基于起始记录序号计算新页码 this.page = Math.ceil(firstItemIndex / newItemsPerPage); // 处理页码超出边界的情况 if (this.page > this.totalPages) { this.page = this.totalPages; } this.itemsPerPage = newItemsPerPage; this.getItems(); }
验证示例逻辑
- 初始状态:每页10条,第6页 → 第一条记录是
(6-1)*10 +1 =51 - 切换到每页25条:新页码是
Math.ceil(51/25)=3→ 第3页,显示51-75,符合预期 - 切回每页10条:新页码是
Math.ceil(51/10)=6→ 第6页,显示51-60,和预期一致
内容的提问来源于stack exchange,提问作者codlix
相关产品推荐
相关产品推荐

