我正在使用Restangular和AngularJS,我想在控制器的函数中迭代一个集合,我需要修改Restangular返回的集合:
var OrderController = [ '$scope', '$http', 'Restangular',
function($scope, $http, Restangular) {
$scope.orders = Restangular.all('orders').getList();
$scope.toggleOrder = function(order) {
_.forEach($scope.orders, function(order) {
console.log(order); // This is not an order!
order.someProperty = false; // My goal
});
});
}];
我认为问题在于$scope.orders
是一个承诺,而不是一个实际的数组,所以_.forEach
尝试迭代承诺的属性而不是对象。我得到与angular.forEach
相同的结果.
如何迭代 Restangular 资源集合?我也想访问 lodash 的所有收集功能,例如 _.filter
。
Restangular.all('orders').getList()
- 是一个承诺,而不是数组。
使用以下$object
分配列表:
$scope.orders = Restangular.all('orders').getList().$object;
列表将是一个空数组,直到请求完成。
更新问题的完整代码(包括请求完成的订单修改)
$scope.orders = [];
function modifyOrders(orders){ ... }
Restangular.all('orders').getList().then(function(orders){
modifyOrders(orders);
$scope.orders=orders;
});
$scope.toggleOrders = function(toggledOrder){
_.forEach($scope.orders, function(order) { ... });
};
试试这个:
var OrderController = [ '$scope', '$http', 'Restangular',
function($scope, $http, Restangular) {
$scope.toggleOrder =
Restangular.all('orders').getList().then(function(orders){
_.forEach(orders, function(order) {
console.log(order); // This is not an order!
order.someProperty = false; // My goal
});
});
}];
在 getList() 方法之后,你得到了在参数中获取列表的承诺。
来自文档 : https://github.com/mgonto/restangular#using-self-reference-resources
即使接受的答案解决了对数组和承诺的误解,仍然存在一个问题......
_.forEach
还可以,但_.filter
不是。 洛达什条 Restangular 收集方法。
事实上
api.getList().then(function(items) {
console.log(items.getRestangularUrl);
items = _.filter(items, function() { return true; });
console.log(items.getRestangularUrl);
));
结果在
log: function() {...}
日志:未定义
如何完成过滤器保留 Restangular 方法?