ngtable分页和排序

时间:2015-08-17 15:32:10

标签: angularjs ngtable

使用ngtable我有以下问题。当我发出一个http get请求并获得数据时,一切都可以正常使用ngtable,但它没有给我订购的可能性。但是,如果我创建一个新的http get请求(没有重新加载页面)。然后向我展示包含新数据的表,正确显示新请求的数据量,但不显示分页,而不是选择每页的行数。我尝试了重载表参数,没有结果。

我的代码:



    $scope.httpget = function(uri)
    {
        $scope.data=[];
        $http.get(uri).then(
            function(result){
              $scope.data = result.data;
              $scope.tableParams = new ngTableParams({
                        page: 1,
                        count: 10,
                        filter: {
                            message: ''
                        },
                        sorting: {
                            timestamp: 'asc'
                        }
                    },
                    {
                        getData: function($defer, params) {
                            var orderedData = params.sorting() ?
                                $filter('orderBy')($scope.data, params.orderBy()) :
                                $scope.data;

                            params.total(orderedData.length);
                            $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                        }
                    });
            }
        );
    }

<table ng-table='tableParams'>
    <tr ng-repeat='d in $data | filter:search'>
         <td data-title="'Collected Timestamp'" sortable="'timestamp'"> {{d.timestamp}} </td>
         <td data-title="'Tag Name'", sortable="'tag_name'"> {{d.tag_name}} </td>
         <td data-title="'Value'", sortable="'value'"> {{d.value}} </td>
    <tr>
</table>	
&#13;
&#13;
&#13;

第一次http获取后结果正常 enter image description here

第二次http get(无分页)后结果不好

enter image description here

2 个答案:

答案 0 :(得分:4)

你使用过

吗?
$scope.tableParams.total(data.length)

$scope.tableParams.reload();

在任何时候?您是如何做另一个获取请求的?&#39;?如果没有帮助,请尝试上传您的代码

答案 1 :(得分:3)

这也发生在我身上。我诊断的问题是ng-table实例的重复初始化。 您需要将ng-table的初始化放入单独的函数中。(在我的例子中,它是init()

在您的代码中,它应该是这样的:

    $scope.data = [];

    init();
    function init() {
        $scope.tableParams = new ngTableParams({
            page: 1,
            count: 10,
            filter: {
                message: ''
            },
            sorting: {
                timestamp: 'asc'
            }
        },{
            getData: function ($defer, params) {
                var orderedData = params.sorting() ?
                    $filter('orderBy')($scope.data, params.orderBy()) :
                    $scope.data;

                params.total(orderedData.length);
                $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
            }
       });
    };
$scope.httpget = function (uri) {
    $http.get(uri).then(function (result) {
        $scope.data = result.data;
        $scope.tableParams.total($scope.data.length);
        $scope.tableParams.reload();
    }
  );
}

希望这有帮助。