我试图理解如何修改$resource.query()
返回的数据 - 事实证明 - 实际上不是来自$q
的Promise,而是一个空的对象/数组要填充的时候异步调用完成。
我定义了一个服务,我想修改来自$resource
的数据(过滤它是准确的),但实际上没有任何过滤。我得到整个阵列。
我确定我在这里找不到一些微不足道的东西。提前感谢您的帮助。
这是服务(员工是$resource
):
factory('Report', ['Employee',
function(Employee) {
var query = function(id, cb) {
return Employee.query({}, function(data) {
return cb(data, id);
});
};
var findByManager = function(employees, employeeId) {
return employees.filter(function(element) {
console.log(element);
return employeeId === element.managerId;
});
};
return {
query: function(employee) {
return query(employee.employeeId, findByManager);
}
};
}
]);
修改
根据ippi的建议,我也试过访问潜在的承诺:
var query = function(id) {
return Employee.query().$promise
.then(function(data) {
return findByManager(data, id);
});
};
return {
query: query,
}
在控制器中:
$scope.employees = Report.query(id);
但它返回的是对象而不是数组。
答案 0 :(得分:1)
我不确定这是否是您正在寻找的完整答案,但它应该有所帮助:
Employee.query({...})不是承诺本身,但您可以像这样访问原始的$ http承诺:
Employee.query({...}).$promise.then(function(result){
console.log(result);
});
($ resource只是$ http的包装。)
如果您不介意我这么说,那么在客户端过滤您的资源的想法,您检索它们的第二个听起来就像是开始使用API资源的想法一样。请求“员工”的子集确实听起来像API功能,应该可以在服务器端实现。我会说你想把你的资源称为:
Employee.query({ managerId: employee.employeeId });
好吧,我取消了你的Report
- 工厂(对不起!),结果是:
// Controller
$scope.id = 1; // Or something...
$scope.employees = Employee.query();
// Html
<tr ng-repeat="employee in employees | filter: {employeeId: id} : true | orderBy:id">
似乎这也是一个可以接受的答案:https://stackoverflow.com/a/28907040/1497533