Angularjs - 数组

时间:2017-04-01 12:11:48

标签: angularjs mongodb function controller sum

我试图从控制器中的对象数组获得成本和。我从mongo collection

获得了这个数组
vm.costs = CostsService.query();

然后调用函数来计算成本总和

  vm.sum = function (items, prop) {
  console.log(items);
  return items.reduce(function (a, b) {
    return a + b[prop];
  }, 0);
};

vm.costTotal = vm.sum(vm.costs, 'costprice');

我不知道为什么我得到0值而不是真正的成本总和。 我在Chrome浏览器中检查了控制台中的项目,但列表以正确的方式显示。

console.log() screenshot

有一件有趣的事情,如果我在控制器硬编码数组中添加然后调用sum函数,一切看起来都不错。我认为这个问题来自mongo,但是我没有任何想法如何获得这笔费用。

我的CostService方法如下:

// Costs service used to communicate Costs REST endpoints
(function () {
  'use strict';

  angular
    .module('costs')
    .factory('CostsService', CostsService);

  CostsService.$inject = ['$resource'];

  function CostsService($resource) {
    return $resource('api/costs/:costId', {
      costId: '@_id'
    }, {
      update: {
        method: 'PUT'
      }
    });
  }
}());

1 个答案:

答案 0 :(得分:0)

这可能是因为您的CostsService可能会直接撤回Promise解析costs而不是costs数组。要解决这个问题,您需要调用承诺中的vm.sum .then返回服务调用。像这样:

  vm.sum = function(items, prop) {
    console.log(items);
    return items.reduce(function(a, b) {
      return a + b[prop];
    }, 0);
  };

  CostsService.query().$promise.then(function(costs) {
    vm.costs = costs;
    vm.costTotal = vm.sum(costs, 'costprice');
  });