在ng-table的getData函数

时间:2016-08-23 16:23:32

标签: javascript angularjs ngtable

我遇到了使用ng-table的问题,其中应该传递给我的getData函数的参数是未定义的。我是AngularJS和ng-table的新手,所以任何帮助都会受到赞赏。我已经通过直接调用它们来验证下面代码中的REST调用,所以问题出在我的角度代码/配置中。

无论如何,这是我的控制器的一个伪示例。实际的代码在内联网上,所以我不能直接粘贴它,所以请原谅任何来自转录的拼写错误。使用ng-table 1.0.0和angular 1.5.8:

myApp.controller('myCtrl', ['$scope', '$http', 'NgTableParams',
    function($scope, $http, NgTableParams) {
    $http.get('services/data/count').success(function(data) {
        // this works fine
        $scope.totalRows = data.rowCount;
    });
    $scope.tableParams = new NgTableParams({
        page: 1
        count: 20
    }, {
        total: $scope.totalRows,
        getData: function($defer, params) {
            // this line fails with params being undefined
            $http.get('/services/data/' + params.page() + '/' + params.count()) {
            .success(function(data) {
                $scope.data = data;
                $defer.resolve(data);
            });
        }
    });
}]);

这是相关的html:

<table ng-table="tableParams" class="table table-condensed table-striped">
    <tr ng-repeat="row in data">
        // row stuff here
    </tr>
</table>

我在getData http调用之前插入了console.log语句,并且params打印为未定义。

3 个答案:

答案 0 :(得分:6)

对不起,没有意识到我的评论会令人困惑。这是你的答案:

假设您在getData键中放置的函数(由NgTable API)只取一个参数,代表params。换句话说,getData函数的第一个参数始终包含params值,即使您将其命名为$defer。并且第二个参数总是未定义的(毕竟,API只用一个参数调用它),即使你将其命名为params

如果你想访问$defer(似乎你这样做),我认为你应该将它注入你的控制器(将'$defer'添加到顶部的依赖关系数组中,然后添加{ {1}}到控制器函数的参数列表,位于相同的位置。)

看起来像这样:

$defer

答案 1 :(得分:5)

当我更新我的ng-table时,我也遇到了这个问题。您的代码应该在1.0.0版本之前的版本中运行。 1.0.0-beta.9是支持您代码的最后一个版本。

1.0.0 change notes中说:

getData签名更改

已删除提供给getData方法的$ defer参数。相反,你的 getData方法应返回一个数组或一个解析为数组的promise。

迁移

此前:

var tp = new NgTableParams({}, { getData: getData });

function getData($defer, params){
    // snip
    $defer.resolve(yourDataArray);
}

现在:

var tp = new NgTableParams({}, { getData: getData });

function getData(params){
    // snip
    return yourDataArrayOrPromise;
}

答案 2 :(得分:0)

$ defer变量(感谢Jesse Amano!)拥有我需要的值。我不确定为什么会这样,但我可以使用它。