如何创建嵌套的$ resource - AngularJS

时间:2014-07-01 03:02:23

标签: javascript angularjs

我试图弄清楚如何创建嵌套的$resource。我想出了以下内容,这似乎有用......但是看起来非常错误。希望有人能指出我正确的方向。

我的数据结构是:

allData = [{
    id:1,
    info:'someinfo',
    foo :'foobar',
    bar : {...},
    baz : [{...}, {...}, {...}]
    },
    {id:2, ...},
    {id:3, ...}
    ];

我希望allData中的每个对象都是$resource个对象。我还希望baz数组中的每个对象都是$resource对象。

我想出的是:

var InfoService = angular.module('InfoServices', ['ngResource']);

// The inner resource
InfoService.factory('Baz', ['$resource',
    function($resource) {
      var baz = $resource('/server/baz', {});

      // custom baz methods
      baz.prototype.getBaz = function() {};

      return baz;
}]);

// Outer resource
InfoService.factory('Info', ['$resource',
    function($resource) {
      var info = $resource('/server/info', {});

      // custom data methods
      info.prototype.getInfoStats = function() {};

      return info;
}]);

// Array of resources.
InfoService.factory('AllInfo', ['$resource','Info', 'Baz',
function($resource,Info,Baz) {
  var resource = $resource('/server/allinfo', {},
                          { query : {
                              method:'get',
                              isArray:true,
                              transformResponse:function(data) {
                                var allinfo = JSON.parse(data);

                                for (var i=0;i<allinfo.length;i++) {
                                  allinfo[i] = new Info(allinfo[i]);

                                  for (var j=0;j<allinfo[i].baz.length;j++) {
                                    allinfo[i].baz[j] = new Baz(allinfo[i].baz[j]);
                                  }

                                }
                                return allinfo;
                              }
                          });
  return resource;
}]);

就像我说的那样......似乎非常错误,实现上述目标的角度是什么?

1 个答案:

答案 0 :(得分:1)

InfoService.factory('resources', function($resource) {
    return {
        id: $resource(...),
        info: $resource(...),
        //...and so on... 
    }
})

//example usage
InfoService.controller('ctrl', function(resources) {
    this.id = resources.id.query();
})

如果你想把一切都变成资源,这就是你要走的路。但问问自己......是否真的有必要将每个属性都作为一个单独的资源?那么在资源中对所有严格相关的属性进行分组呢?我问,因为我不确定这些数据是什么给你的。