Angularjs: dir-pagination-controls 不显示下一页,即使在按下页面按钮之后

Angularjs: dir-pagination-controls doesn't show the next page, even after the page button is pressed

我一直在尝试合并 dir-pagination-controls,但无法显示基于所选页面的页面。

<div ng-controller="TableController as tc">
    <table>
        <tbody dir-paginate="order in tc.orders | itemsPerPage: 10" total-items="tc.totalOrders" current-page="currentPage">
            <tr ng-click="tc.showOrderDetail(order.id)">
                <td ng-bind="order.id"></td>
                <!-- Simliar lines are here -->
            </tr>
        </tbody>
    </table>
    <dir-pagination-controls 
       boundary-links="true" 
       on-page-change="tc.pageChangeHandler(newPageNumber)" 
       template-url="dirPagination.tpl.html">
    </dir-pagination-controls>
</div>

table 显示了我的预期。但是,当我按下任何按钮时,生成的分页控制器不会显示下一页。

这是脚本的相关部分。

angular.module('adminAngular', ['ui.bootstrap','dialogs.main','angularUtils.directives.dirPagination'])
.controller('TableController', function($http){

    var instance = this;

    this.orders = [];
    $http({
        //works fine
    }).then(function (response) {
        instance.orders = response.data;
        instance.totalOrders = instance.orders.length;
        //The "instance.orders" gets the expected data, and used for in dir-paginate="order in tc.orders
    });

    this.pageChangeHandler = function(num) {
        console.log('going to page ' + num);
    };

    this.pageChanged = function(newPage) {
        getResultsPage(newPage);
    };

UPDATE pageChangeHandler 显示按下了哪个按钮,但页面没有改变。 (其他都很好。)

此代码基于the official document and its demo,但我找不到真正错误的地方。

如果您能提出任何建议,我将不胜感激。

解决方案是从 dir-paginate 指令中删除 total-items。 这是一个带有简单示例的 plunker

当您进行异步调用以获取 each 页面项目时,将使用 total-items 属性。 因此,首先异步调用您获取第一页的项目,并且当您更改页面时您应该从服务器获取相应页面的项目。 total-items 告诉分页指令你总共有多少页,所以它知道如何构建元素。

如果你想对每个页面进行异步调用,你可以使用 total-items 并在你进行另一个异步调用的地方实现 pageChanged

$scope.pageChanged = function(newPage) {
   // get orders for newPage number
   $http.get(...).then(function(response) {
       // orders for newPage number fill the same 'orders' array
       this.orders = response.data
   });
}