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

Smart Table tbody中currentPage未定义的问题解决问询

解决Smart Table tbody中无法获取currentPage的问题

你遇到的核心问题是Smart Table的分页参数currentPage默认存在于分页组件的子作用域中,而你的tbody嵌套ng-repeat的作用域无法直接访问到它。这里有两种可靠的解决方案:

方案一:显式绑定currentPage到控制器变量(推荐)

通过st-pagination的st-page属性,把分页的当前页值绑定到你控制器中的变量,这样整个模板都能轻松访问到它:

步骤1:修改分页组件代码

在tfoot的分页div上添加st-page绑定:

<tfoot>
  <tr>
    <td colspan="10" class="text-center">
      <div st-pagination="" st-items-by-page="10" st-displayed-pages="7" st-page="currentPage"></div>
    </td>
  </tr>
</tfoot>

步骤2:在控制器中初始化变量

如果用$scope语法:

// 控制器中
$scope.currentPage = 1; // 初始化默认第一页

如果用controllerAs语法(更推荐的组件化写法):

// 控制器中
vm.currentPage = 1;
// 模板中对应修改为:st-page="vm.currentPage",tbody中用(vm.currentPage -1)*10

步骤3:在tbody中使用currentPage

现在就能正常计算全局索引了:

<tbody>
  <tr ng-repeat="row in inputBuckets track by $index">
    <td>{{row.key | date:'yyyy-MM-dd HH:mm:ss'}}</td>
    <!-- 现在currentPage已可正常访问 -->
    <td ng-repeat="item in input.inputData">{{item[$parent.$index + (currentPage - 1)*10]}}</td>
  </tr>
</tbody>

方案二:通过表格作用域获取(不推荐,依赖内部实现)

如果不想修改分页组件,也可以通过表格元素的作用域直接获取Smart Table内部的currentPage,但这种方法依赖Smart Table的内部实现,后续版本可能会变动:

<tbody>
  <tr ng-repeat="row in inputBuckets track by $index">
    <td>{{row.key | date:'yyyy-MM-dd HH:mm:ss'}}</td>
    <!-- 给表格加id="dataTable",然后通过作用域获取 -->
    <td ng-repeat="item in input.inputData">{{item[$parent.$index + (angular.element('#dataTable').scope().currentPage - 1)*10]}}</td>
  </tr>
</tbody>

记得给表格添加id:<table id="dataTable" ...>

额外说明

你的外层ng-repeat="row in inputBuckets"是分页后的数据集,所以$parent.$index是当前页的局部索引,加上(currentPage-1)*10就能得到全局数据的索引,这样每页就能加载对应分段的数据集了。注意要确保input.inputData的长度足够,避免索引越界的问题。

内容的提问来源于stack exchange,提问作者Matija Župančić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:00:28