1

我将 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, 。

4

3 回答 3

1

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) { ... });
};
于 2014-08-05T06:40:43.970 回答
1

尝试这个 :

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

于 2013-09-24T19:07:01.350 回答
0

即使接受的答案解决了对数组和承诺的误解,问题仍然存在......

_.forEach可以,但_.filter不是。Lodash 剥离了 Restangular 收集方法。

的确

api.getList().then(function(items) {
  console.log(items.getRestangularUrl);
  items = _.filter(items, function() { return true; });
  console.log(items.getRestangularUrl);
));

结果是

日志:函数(){...}

日志:未定义

如何完成保留 Restangular 方法的过滤器?

于 2015-10-06T09:59:02.913 回答