Recruiter Dashboard |
<pagination total-items="active_jobs.total" ng-model="currentActivePage" ng-change="activePageChanged()"></pagination>Pagination needs to know the size of the array it is paging over (active_jobs.total), has a variable to store the current page in (currentActivePage) and a function to call when you change the page - activePageChanged().
And here's the controller function :
$scope.activePageChanged = function(i) {As you can see all we are doing is changing the start end end points of the items we are viewing in the array; we have been a bit lazy and not passed itemsPerPage to the directive as we are using the default of ten.
$scope.activePageStart = ($scope.currentActivePage -1) * $scope.itemsPerPage;
$scope.activePageEnd = $scope.activePageStart + 10 ;
}
The ng-repeat call looks like this :
<div class='row' ng-repeat="job in active_jobs.hits.slice(activePageStart,activePageEnd)">I did see pages offering a range filter but array.slice() seems more direct.
In this example the whole array is passed from the backend to the front in one go (this is so it can be sorted in the browser), but you don't have to do it that way, other pages we have make a call to the back end from within the activePageChanged() function to get the next page of results.
Sorting
AngularJS provides the orderBy filter that will sort an array, the documentation is pretty good, the only real point to pick up is that to use it in our pagination example we need to call the controller version and not use the template filter version (this would only sort the array slice and not the whole array). So in the template we make a function call :<p><a href="" ng-click="reverse=!reverse;active_order('_source.reference', reverse)">Reference<span class="glyphicon glyphicon-resize-vertical sort-col-header"></a></p>We call the active order function with the column we want to sort by and the direction of sort. The reverse=!reverse just twiddles the sort order.
We then need to set up the controller to use orderBy by injecting $filter :
function SomeCtrl ($scope, $location, $filter...
and using a bit of syntactic suger :
var orderBy = $filter('orderBy');it is just a matter of defining the function :
$scope.active_order = function(col, reverse) {
$scope.active_jobs['hits'] = orderBy($scope.active_jobs['hits'], col, reverse);
};
and Robert is your father's brother.
I am reading your post from the beginning, it was so interesting to read & I feel thanks to you for posting such a good blog, keep updates regularly
ReplyDeleteAngularjs Training In Hyderabad