在 Restangular 集合上使用 lodash 数组函数



我正在使用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 方法?

最新更新