【发布时间】:2015-07-17 01:35:29
【问题描述】:
我有一个检索数组中对象的服务。
appServices.factory('FooService', ['$resource', function ($resource) {
var resource = $resource('/api/user/:username/foos/:id', {username: '@username'}, {
delete: { method: 'DELETE', params: {id: '@id'} },
get: { method: 'GET', params: {id: '@id'} },
foosOfTheWeek: {method: 'GET', params: {dateFrom: '@dateFrom', dateTo: '@dateTo'}, isArray: true}
});
return resource;
}]);
假设每个 foo 都是这样的:
{ id: 2, date: '2015-05-13', attr1: "bar1", attr2: "hello" }
我需要将“foosOfTheWeek”返回的 foos 包含在不同的对象数组中,如下所示:
[
{date:'2015-05-10', foos: [ { id: 2, date: '2015-05-10', attr1: "bar1", attr2: "hello1" } ]},
{date:'2015-05-11', foos: []},
{date:'2015-05-12', foos: [ { id: 3, date: '2015-05-12', attr1: "bar2", attr2: "hello2" }, { id: 4, date: '2015-05-12', attr1: "bar3", attr2: "hello3" } ]},
{date:'2015-05-13', foos: []},
{date:'2015-05-14', foos: []},
{date:'2015-05-15', foos: []},
{date:'2015-05-16', foos: []},
]
我有一个进行这种转换的函数,但如果我从这样的控制器调用它,我不知道如何让我的服务返回最后一个数组:
FooService.<FunctionForLastArray>()
编辑:
我已经尝试过这种方法,它返回我想要的列表,但我不确定这是否是解决它的最佳方法,因为我自己返回列表而不是承诺。
在我的服务声明中我添加了:
- 返回对象列表的函数:
{ date: <dateValue>, foos: <listOfFoos> } - 返回资源中的函数。
所以基本上我从控制器调用它为:
FooCtrl.foosByWeek = FooService.foosOfTheWeek(filters);
其中 filters 是一个有一些约束(dateFrom、dateTo、user)的对象
resource.foosOfTheWeek = function (filters){
var days = getDaysOfTheWeek(filters.dateFrom, filters.dateTo);
this.foosOfTheWeek(filters, function(data){
for (var i = 0; i < data.length; i++){
var i = moment(data[i].date).isoWeekday() - 1;
days[indexDay].foos.push(data[i]); // put the foo in the proper day
}
});
return days;
};
提前致谢!
【问题讨论】:
标签: angularjs service angular-promise ngresource