javascriptangularjstwitter-bootstrappagination

Angular paging generates wrong number of pages


I am having a hard time getting the Angular paging to work correctly. The number of pages seems to be off. For example, for one of my searches, the number of returned results is 1005. Displaying 16 results per page, should have 63 pages total. Instead it generates 101. I appreciate any suggestions on why this is happening and how to resolve.

Thanks in advance!

<table class="table table-striped results">
                    <thead>
                        <tr>
                            <th ng-repeat="x in json.headers">{{ x }}</th>
                        </tr>
                    <thead>
                    <tbody>
                        <tr ng-repeat="x in filteredResults">
                            <td><a href="#">{{ x.name }}</a></td>
                            <td>{{ x.city }}</td>
                            <td>{{ x.state }}</td>
                            <td>{{ x.zip }}</td>
                            <td>{{ x.phone }}</td>
                        </tr>
                    </tbody>
                    </ul>
                </table>
                <pagination         
                                    style="position:absolute; bottom:10px;"
                                    ng-show="json.results.length"
                                  ng-model="currentPage"
                                  total-items="json.results.length"
                                  max-size="maxSize"  
                                  boundary-links="true"
                                  next-text=">"
                                  last-text=">>"
                                  previous-text="<"
                                  first-text="<<">
                </pagination>

JavaScript

var app = angular.module('myApp', ['ui.bootstrap']);
        app.controller('formCtrl', function($scope, $http){

            $(document).ready(function(){
                $('.submit-search').click(function(){
                    $http.get('model/search_url.php', {
                        params: { searchBy: $scope.user.searchBy, search: $scope.user.search }
                    }).success(function (response){
                        $scope.json = response;
                        $scope.filteredResults = [];
                        $scope.currentPage = 1
                        $scope.numPerPage = 16
                        $scope.maxSize = 5;

                        $scope.$watch("currentPage + numPerPage", function() {
                            var begin = (($scope.currentPage - 1) * $scope.numPerPage);
                            var end = begin + $scope.numPerPage;
                            $scope.filteredResults = $scope.json.results.slice(begin, end);
                        });
                    });
                });
        });

Solution

  • You're missing the items-per-page, in your case it should be 16, but since you don't provide it it set to the default of 10 items per page.