<!DOCTYPE html>
<html ng-app="app">
<head>
<link rel="stylesheet" href="style.css">
<script data-require="angularjs@1.5.5" data-semver="1.5.5" src="https://code.angularjs.org/1.5.5/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="PagerController">
<div ng-repeat="data in displayItems">
<span>Data {{data}}</span>
</div>
<paging-control paging-size="pagingSize" noofitem="dataPerPage" total-items="totalItems" display-items="displayItems"></paging-control>
</body>
</html>
.pager {
display: inline-block;
padding-left: 0;
margin: 20px 0;
border-radius: 4px;
}
.pager>li {
display: inline;
}
.pager>li>a {
position: relative;
float: left;
padding: 6px 12px;
margin-left: -1px;
line-height: 1.42857143;
color: #fff;
text-decoration: none;
background-color: #969596;
border: 1px solid #000;
}
.pager>li>a {
cursor: pointer;
}
.pager>.active>a {
z-index: 2;
color: #fff;
cursor: default;
background-color: #bb0731;
border-color: #bb0731;
}
.disabled {
background-color: #B7B7B7 !important;
}
.disabled>a {
cursor: default !important;
color: #B7B7B7 !important;
}
AngularJS pagination directive with four paramaters
1- Paging size
2- No of item per page
3- Total Items array(sorted)
4- Result array object
(function() {
function PagingController($scope) {
$scope.pager = {};
$scope.pagingSize = $scope.pagingSize || 10;
$scope.itemPerPage = $scope.itemPerPage || 10;
function setPager (itemCount, currentPage, itemPerPage) {
currentPage = currentPage || 1;
var startPage, endPage;
var totalPages = Math.ceil(itemCount / itemPerPage);
if (totalPages <= $scope.pagingSize) {
startPage = 1;
endPage = totalPages;
} else {
if (currentPage + 1 >= totalPages) {
startPage = totalPages - ($scope.pagingSize - 1);
endPage = totalPages;
} else {
startPage = currentPage - parseInt($scope.pagingSize/2);
startPage = startPage <= 0 ? 1 : startPage;
endPage = (startPage + $scope.pagingSize - 1) <= totalPages ? (startPage + $scope.pagingSize - 1) : totalPages;
if(totalPages === endPage) {
startPage = endPage - $scope.pagingSize + 1;
}
}
}
var startIndex = (currentPage - 1) * itemPerPage;
var endIndex = startIndex + itemPerPage - 1;
var index = startPage;
var pages = [];
for(; index < endPage + 1; index++)
pages.push(index);
$scope.pager.currentPage = currentPage;
$scope.pager.totalPages = totalPages;
$scope.pager.startPage = startPage;
$scope.pager.endPage = endPage;
$scope.pager.startIndex = startIndex;
$scope.pager.endIndex = endIndex;
$scope.pager.pages = pages;
}
$scope.setPage = function(currentPage) {
if (currentPage < 1 || currentPage > $scope.pager.totalPages)
return;
setPager($scope.totalItems.length, currentPage, $scope.itemPerPage);
$scope.displayItems = $scope.totalItems.slice($scope.pager.startIndex, $scope.pager.endIndex + 1);
};
$scope.setPage(1);
}
function PagerController($scope){
$scope.pagingSize = 5;
$scope.dataPerPage = 10;
$scope.totalItems = [];
for(var i=1; i <= 200; i++)
$scope.totalItems.push(i);
$scope.displayItems = [];
}
angular.module('app', []).controller('PagerController', ['$scope', PagerController]).directive('pagingControl', [function(){
return {
restrict: 'E',
templateUrl: 'paging.html',
controller: ['$scope', PagingController],
scope: {
totalItems: "=",
displayItems: '=',
pagingSize: '=',
itemPerPage: '=noofitem'
}
};
}]);
})();
<ul ng-if="pager.pages.length" class="pager">
<li ng-class="{disabled:pager.currentPage === 1}">
<a ng-click="setPage(1)">First</a>
</li>
<li ng-class="{disabled:pager.currentPage === 1}">
<a ng-click="setPage(pager.currentPage - 1)">Previous</a>
</li>
<li ng-repeat="page in pager.pages" ng-class="{active:pager.currentPage === page}">
<a ng-click="setPage(page)">{{page}}</a>
</li>
<li ng-class="{disabled:pager.currentPage === pager.totalPages}">
<a ng-click="setPage(pager.currentPage + 1)">Next</a>
</li>
<li ng-class="{disabled:pager.currentPage === pager.totalPages}">
<a ng-click="setPage(pager.totalPages)">Last</a>
</li>
</ul>