我试图弄清楚如何创建嵌套的$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;
}]);
就像我说的那样......似乎非常错误,实现上述目标的角度是什么?
答案 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();
})
如果你想把一切都变成资源,这就是你要走的路。但问问自己......是否真的有必要将每个属性都作为一个单独的资源?那么在资源中对所有严格相关的属性进行分组呢?我问,因为我不确定这些数据是什么给你的。