角度资源依赖

时间:2015-11-09 23:24:18

标签: angularjs rest angular-resource

我有一个使用$ resource的角度应用程序,它有一些工厂使用Rest API进行一些调用。

方案是获取以下三个对象: 1)项目, 2)项目项目和 3)项目项目细节。

所有三个对象都被定义为3个不同的工厂,并且如果我逐个尝试它们,它们正在正确执行。 但是,我正在尝试同时加载一个包含所有三个工厂的页面。

我尝试了几种不同的方法,但都失败了。 问题是工厂ProjectItemDetails依赖于父工厂数据,这在执行时是不可用的。

工厂

angular.module('myProject')
  .factory ('Project', function($resource) {
    return $resource('api/project/:id', {id: '@id'});
  })
  .factory ('ProjectItems', function($resource) {
    return $resource('api/projectitems/:id', {id: '@id'});
  })
  .factory ('ProjectItemDetails', function($resource) {
    return $resource('api/projectitemdetails/:id', {id: '@id'});
  });

Project和ProjectItems请求相同的ID,但ProjectItemDetails请求在每个ProjectItem中找到detail_id。

现在,另外,对于每个ProjectItem,我想对在ProjectItemDetails中找到的特定字段(金额)执行求和操作。 即一个ProjectItem有3个详细记录,每个记录的数量为150,我想在每个ProjectItem中添加一个显示这些详细信息总和的字段(450)。

从后端我看到所有API都已执行,问题是将数据恢复为角度。

控制器

angular.module('myProject')
  .controller('SingleController', function($scope, Project, ProjectItems, ProjectItemDetails, $rootScope, $location, $routeParams) {
    $scope.project = Project.query({id: parseInt($routeParams.id, 10)});

    ProjectItems({id: parseInt($routeParams.id, 10)}, function(data) {
        $scope.projectitems = data;
        for (var i=0; i < $scope.projectitems.length; i++) {

            ProjectItemDetails.query({id: parseInt($scope.projectitems[i][“itemid”])}, function(data){
                $scope.projectitems[i].details = data;

                var amnt = 0;
                for (var j = 0; j < $scope.projectitems[i].details.length; j++) {
                    amnt += $scope.projectitems[i].details[j].AMOUNT;
                };

            });
        };
    });

将数据分配给projectitem时出错 “TypeError:无法设置未定义的属性'详细信息'” 经过大量的搜索,似乎“我”已经超出界限 即我有3个项目(0,1,2),我是3个。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:-1)

您正在遇到以下变体:

javascript-closure-inside-loops-simple-practical-example

当ProjectItemDetails.query解析并且你在它的函数内部时,我就是3。

尝试从新函数调用ProjectItemDetails.query,将i作为参数传递给函数。