【问题标题】:Improper pagination with AngularJS bootstrapAngularJS引导程序的不正确分页
【发布时间】:2014-11-21 23:33:26
【问题描述】:

HTML 代码

<body ng-app="MyApp">
  <div ng-controller="PaginationCtrl">
    <table class="table table-striped">
      <thead>
        <tr>
          <th>Id</th>
          <th>Name</th>
          <th>Description</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="item in pagedItems">
          <td>{{item.id}}</td>
          <td>{{item.name}}</td>
          <td>{{item.description}}</td>
        </tr>
      </tbody>
      <tfoot>
        <td colspan="3">
          <div class="pagination">
            <ul>
              <li ng-class="prevPageDisabled()">
                <a href ng-click="prevPage()">« Prev</a>
              </li>
              <li ng-repeat="n in range()" ng-class="{active: n == currentPage}" ng-click="setPage(n)">
                <a href="#">{{n+1}}</a>
              </li>
              <li ng-class="nextPageDisabled()">
                <a href ng-click="nextPage()">Next »</a>
              </li>
            </ul>
          </div>
        </td>
      </tfoot>
    </table>
  </div>
</body>

Javascript

 var app = angular.module("MyApp", []);

app.factory("Item", function() {

  var items = [];
  for (var i=0; i<50; i++) {
    items.push({ id: i, name: "name "+ i, description: "description " + i });
  }

  return {
    get: function(offset, limit) {
      return items.slice(offset, offset+limit);
    },
    total: function() {
      return items.length;
    }
  };
});

app.controller("PaginationCtrl", function($scope, Item) {

  $scope.itemsPerPage = 20;
  $scope.currentPage = 0;

  $scope.range = function() {
    var rangeSize = 5;
    var ret = [];
    var start;

    start = $scope.currentPage;
    if ( start > $scope.pageCount()-rangeSize ) {
      start = $scope.pageCount()-rangeSize;
    }

    for (var i=start; i<start+rangeSize; i++) {
      ret.push(i);
    }
    return ret;
  };


  $scope.prevPage = function() {
    if ($scope.currentPage > 0) {
      $scope.currentPage--;
    }
  };

  $scope.prevPageDisabled = function() {
    return $scope.currentPage === 0 ? "disabled" : "";
  };

  $scope.nextPage = function() {
    if ($scope.currentPage < $scope.pageCount() - 1) {
      $scope.currentPage++;
    }
  };

  $scope.nextPageDisabled = function() {
    return $scope.currentPage === $scope.pageCount() - 1 ? "disabled" : "";
  };

  $scope.pageCount = function() {
    return Math.ceil($scope.total/$scope.itemsPerPage);
  };

  $scope.setPage = function(n) {
    if (n > 0 && n < $scope.pageCount()) {
      $scope.currentPage = n;
    }
  };

  $scope.$watch("currentPage", function(newValue, oldValue) {
    $scope.pagedItems = Item.get(newValue*$scope.itemsPerPage, $scope.itemsPerPage);
    $scope.total = Item.total();
  });

});

这是小提琴。

http://jsfiddle.net/go14nac5/

当 itemsPerPage 为 5 或 10 时,分页工作正常,但当 itemsPerPage 更改为 20 或更多时。分页有问题,页码显示为负值和零。

有人可以帮我解决这个问题以制作强大的引导分页吗?

【问题讨论】:

  • 你有 tagget ui.bootstrap 但你似乎没有使用它。我建议你只使用 ui.bootstrap 中现有的pagination directive

标签: angularjs pagination angular-ui-bootstrap


【解决方案1】:

修改范围函数:

  $scope.range = function() {
var rangeSize = 5;
var ret = [];
var start;

start = $scope.currentPage;
if ( start > $scope.pageCount()-rangeSize ) {
  start = $scope.pageCount()-rangeSize;
    if (start < 0) {
        start = 0;
    }
}

for (var i=start; i<start+rangeSize && i < $scope.pageCount(); i++) {
  ret.push(i);
}
return ret;
  };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2018-09-12
    • 2017-11-24
    相关资源
    最近更新 更多