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

如何调整AngularJS ngTable分页控件的显示顺序?

嘿,我来帮你搞定这个ngTable分页顺序的问题!

问题出在你当前的代码是直接ng-repeat="page in pages",而ngTable默认生成的pages数组里,按钮的顺序可能不是你想要的first → prev → next → last(比如可能是prev、first、next、last这种默认排列),所以循环出来的顺序就乱了。

这里有两个靠谱的解决方案,你可以选一个适合你的:

方案1:手动渲染按钮(最直接可控)

放弃用ng-repeat遍历pages数组,直接按你想要的顺序逐个渲染四个按钮,用ngTable的params对象来判断按钮是否可用,以及处理跳转逻辑:

<ul class="pagination">
  <!-- 首页按钮 -->
  <li ng-class="{'disabled': !params.hasPrevious()}">
    <a ng-click="params.page(1)" href="" translate>TABLE.FIRST</a>
  </li>
  <!-- 上一页按钮 -->
  <li ng-class="{'disabled': !params.hasPrevious()}">
    <a ng-click="params.page(params.page() - 1)" href="" translate>TABLE.PREVIOUS</a>
  </li>
  <!-- 下一页按钮 -->
  <li ng-class="{'disabled': !params.hasNext()}">
    <a ng-click="params.page(params.page() + 1)" href="" translate>TABLE.NEXT</a>
  </li>
  <!-- 末页按钮 -->
  <li ng-class="{'disabled': !params.hasNext()}">
    <a ng-click="params.page(params.totalPages())" href="" translate>TABLE.LAST</a>
  </li>

  <!-- 原有的少于2页时的占位逻辑 -->
  <li ng-if="params.pages < 2" ng-class="{'disabled':true}" ng-repeat="n in ['«','1','»']">
    <a type="button" ng-click="" href="" ng-bind="n"></a>
  </li>
</ul>

这个方法的好处是完全由你控制顺序,不用依赖pages数组的默认结构,逻辑也更清晰。

方案2:自定义排序过滤pages数组

如果你还是想保留ng-repeat的写法,可以在控制器里写一个排序函数,把pages数组按你想要的顺序重新排列:

首先在你的AngularJS控制器里添加这个函数:

$scope.sortPageButtons = function(pages) {
  // 定义我们想要的按钮顺序
  const desiredOrder = ['first', 'prev', 'next', 'last'];
  // 按照定义的顺序对pages数组排序
  return pages.sort((pageA, pageB) => {
    return desiredOrder.indexOf(pageA.type) - desiredOrder.indexOf(pageB.type);
  });
};

然后在模板里用排序后的数组进行循环:

<ul class="pagination">
  <li ng-class="{'disabled': !page.active}" ng-repeat="page in sortPageButtons(pages)" ng-switch="page.type">
    <a ng-switch-when="first" ng-click="params.page(page.number)" href="" translate>TABLE.FIRST</a>
    <a ng-switch-when="prev" ng-click="params.page(page.number)" href="" translate>TABLE.PREVIOUS</a>
    <a ng-switch-when="next" ng-click="params.page(page.number)" href="" translate>TABLE.NEXT</a>
    <a ng-switch-when="last" ng-click="params.page(page.number)" href="" translate>TABLE.LAST</a>
  </li>

  <li ng-if="params.pages < 2" ng-class="{'disabled':true}" ng-repeat="n in ['«','1','»']">
    <a type="button" ng-click="" href="" ng-bind="n"></a>
  </li>
</ul>

这个方法会把pages数组里的按钮按你指定的type顺序重新排列,这样ng-repeat出来的顺序就符合要求了。

两种方法都能解决你的问题,推荐方案1,因为更直观,也不用额外处理数组排序的逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:06:21