我遇到了同样的问题,最终手动进行了排序/过滤/分页:
var app = angular.module("myApp", ["ngTable", "ngResource", "ngTableDemoFakeBackend"]);
(function() {
app.controller("demoController", demoController);
demoController.$inject = ["NgTableParams", "$resource", "$filter"];
function demoController(NgTableParams, $resource, $filter) {
//var Api = $resource("/data");
var Api = $resource("https://jsonplaceholder.typicode.com/posts", {}, {
// Let's make the `query()` method cancellable
query: {method: 'get', isArray: true, cancellable: true}
});
this.tableParams = new NgTableParams({
count: 5
}, {
getData: function(params) {
// ajax request to api
return Api.query().$promise.then(function(data) {
params.total(data.length); // recal. page nav controls
var filteredData = params.filter().id ?
$filter('filter')(data, params.filter()) :
data;
var orderedData = params.sorting() ?
$filter('orderBy')(filteredData, params.orderBy()) : data;
var page = orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count());
return page;
});
}
});
}
})();
这种方法的缺点是由于您正在使用过滤,添加的列越多,您需要做的检查就越多,因为它的工作方式是,当您清除过滤器时,它不会将该对象设置为未定义。它将创建一个像这样的对象:
{ id: null }
这意味着您不能在此行中使用params.filter():
var filteredData = params.filter().id ?
$filter('filter')(data, params.filter()) :
data;