Angular Table 如果我使用不同的 api 排序不起作用
Angular Table sorting does not work if i use a different api
我从
中获取了 ngTable 示例
http://ng-table.com/#/loading/demo-external-array
用代码笔打开它,我使用的是 api
而不是“/data”
https://jsonplaceholder.typicode.com/posts
并添加了 isArray : true
var Api = $resource("https://jsonplaceholder.typicode.com/posts", {}, {
'get': { method: 'GET', isArray: true}
});
在 html 中,为了简单起见,我取出了所有列并保留了 "id" 列
它加载了 id 列,但搜索排序不起作用。
我做错了什么?
换笔来了
我遇到了同样的问题,最后手动执行了 sort/filter/paging:
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;
http://codepen.io/anon/pen/rWRNjQ
您可以查看此代码笔,现在可以使用了。 ;)
getData: function(params) {
// ajax request to api
return Api.get(params.url()).$promise.then(function(data) {
params.total(100); // recal. page nav controls
return ($filter('orderBy')(data, params.orderBy()));
//return data;
});
}
之前我们错过了过滤部分。
return $filter('filter')($filter('orderBy')(data, params.orderBy()),params.filter());
也用于启用过滤器:)
我从
中获取了 ngTable 示例http://ng-table.com/#/loading/demo-external-array
用代码笔打开它,我使用的是 api
而不是“/data”https://jsonplaceholder.typicode.com/posts
并添加了 isArray : true
var Api = $resource("https://jsonplaceholder.typicode.com/posts", {}, {
'get': { method: 'GET', isArray: true}
});
在 html 中,为了简单起见,我取出了所有列并保留了 "id" 列
它加载了 id 列,但搜索排序不起作用。
我做错了什么?
换笔来了
我遇到了同样的问题,最后手动执行了 sort/filter/paging:
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;
http://codepen.io/anon/pen/rWRNjQ
您可以查看此代码笔,现在可以使用了。 ;)
getData: function(params) {
// ajax request to api
return Api.get(params.url()).$promise.then(function(data) {
params.total(100); // recal. page nav controls
return ($filter('orderBy')(data, params.orderBy()));
//return data;
});
}
之前我们错过了过滤部分。
return $filter('filter')($filter('orderBy')(data, params.orderBy()),params.filter());
也用于启用过滤器:)