我遇到了使用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打印为未定义。
答案 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是支持您代码的最后一个版本。
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!)拥有我需要的值。我不确定为什么会这样,但我可以使用它。