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

AngularJS分页异常:选择每页条数后切换页面加载全部数据

解决AngularJS分页选择每页条数后点击其他页加载全部数据的问题

看起来问题出在分页时传入的pageSize是字符串类型,导致计算索引时出现了意外的类型转换,进而让slice方法加载了全部数据。

问题分析

你的下拉列表绑定的inputLimit.name是字符串格式(比如"15"、"20"),而在PagerService.GetPager方法中,直接使用这个字符串进行数学运算:

var startIndex = (currentPage - 1) * pageSize;
var endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);

当pageSize是字符串时,startIndex + pageSize会执行字符串拼接而非数字加法。比如当前页是2、pageSize是"15"时:

  • startIndex = (2-1)*"15" = 15(这里数字乘字符串会自动转成数字,暂时没问题)
  • startIndex + pageSize = 15 + "15" = "1515"(数字加字符串变成字符串)
  • 后续"1515" - 1 = 1514(字符串减数字转成数字)
  • 如果你的总数据量小于1514,endIndex会取totalItems-1,最终slice(15, totalItems)会从第15条加载到最后,看起来像是加载了全部数据(如果总数据量不大的话)。

解决方案

只需要确保pageSize是数字类型即可,有两种简单的修改方式:

方式1:在控制器中传入前转换为数字

修改控制器setPage方法中调用GetPager的代码,把inputLimit.name转成整数:

function setPage(page) {
  if (page < 1 || page > $scope.pager.totalPages) {
    return;
  }
  // 将字符串格式的pageSize转为数字
  const pageSize = parseInt($scope.inputLimit.name, 10);
  $scope.pager = PagerService.GetPager($scope.totalItems, page, pageSize);
  $scope.resultFiltered = $scope.result.slice($scope.pager.startIndex, $scope.pager.endIndex + 1);
}

方式2:在PagerService内部处理类型转换

在GetPager方法开头,把传入的pageSize转为数字,避免外部传入类型错误:

function GetPager(totalItems, currentPage, pageSize) {
  // default to first page
  currentPage = currentPage || 1;
  // 转换为数字,默认页大小10
  pageSize = parseInt(pageSize, 10) || 10;
  // ... 剩余代码不变
}

额外建议

你也可以优化下拉列表的绑定,直接把值绑定为数字:

<select id="input-limit" class="form-control" ng-model="inputLimit" ng-options="item.id as item.name for item in inputLimitList"></select>

然后修改inputLimitList的id为对应数字:

$scope.inputLimitList = [
  { id: 15, name: "15" },
  { id: 20, name: "20" },
  { id: 30, name: "30" },
  { id: 40, name: "40" },
  { id: 50, name: "50" }
];
$scope.inputLimit = $scope.inputLimitList[0].id;

这样inputLimit直接就是数字,调用时不需要再转换,代码更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:51:03