我正在将ngTable用于AngularJS,并从网络api获取数据。当我尝试使用表格中的过滤器时,问题就开始了。
如果我这样做,表中将填充数据,但过滤器将不起作用:
$scope.clientesTable = new NgTableParams({
page: 1,
count: 10
}, {
getData: function (params) {
var clientes = clientesService.getAll(baseUrl);
clientes.then(function (data) {
$scope.clientesTableData = data.data;
}, function (error) {
console.log("Error: " + error);
});
}
});
在文档中,代码是这样的:
$scope.clientesTable = new NgTableParams({
page: 1,
count: 10
}, {
getData: function (params) {
var clientes = clientesService.getAll(baseUrl);
clientes.then(function (data) {
params.total(data.inlineCount);
return data.results;
}, function (error) {
console.log("Error: " + error);
});
}
});
这样做,我看不到前端的数据。如果要在clientesTable中查找数据:
答案 0 :(得分:1)
您必须在getData方法中的return
之前提供clientes.then()
关键字。
答案 1 :(得分:0)
如果我看这个答案https://stackoverflow.com/a/29629034/3177115,就会发现NgTableParams
的用法不同。您需要将其与promise一起使用,promise会将数据返回到NgTableParams对象。
$scope.tableParams = new ngTableParams({
page: 1, count: 5,
}, {
getData: function ($defer, params) {
$http.get(testUrl, { params: params })
.then(function(res) {
$defer.resolve(res.data.items);
}, function(reason) {
$defer.reject();
}
);
},
});
有关详细信息,请参见完整的示例。为使您更好地理解,我对示例进行了一些简化。
编辑:
我认为ng-tables的API已更改-它不再期望延迟。 现在再次查看您的第一个代码示例(您说它可以工作),我明白了过滤器为何不起作用的原因:您没有将过滤器信息传递回服务。
ng-table文档说:http://ng-table.com/#/filtering/demo-filtering-basic
有一个getData函数吗?在这种情况下,您需要应用值 从NgTableParams.filters()到要显示在您的数据中的数据 表。当从中获取数据时通常是这种情况 服务器
我不知道您的服务,但是可以将过滤器参数添加到服务调用中吗?
var clientes = clientesService.getAll(baseUrl, params._params)
顺便说一句:ng-table的文档是一场噩梦-所有示例都相互继承并使用指令和注入。