У меня есть RESTful API, который предоставляет мне сотрудников и отделы. В моем приложении AngularJS мне нужно знать сотрудника и отделы, к которым он принадлежит. Для этого я определил два фабричных сервиса:
angular.module('myApp.services', [])
.factory('Employee', function ($resource) {
return $resource ('/api/employees/:id', { id: '@id' });
})
.factory('Department', function ($resource) {
return $resource ('/api/departments/:id', { id: '@id' });
})
;
В контроллере я вызываю:
$scope.employee = Employee.get({id: 'me'});
Далее я хочу позвонить:
$scope.departments = [];
angular.forEach($scope.employee.departmentIds, function (departmentId) {
$scope.departments.push(Department.get({ id: departmentId }));
});
Но $scope.employee
— объект обещания, поэтому $scope.employee.departmentIds
будет известно только после завершения первого запроса.
Я мог бы решить это так:
Employee.get({id: 'me'}).$promise.then(function (employee) {
$scope.employee = employee;
$scope.departments = [];
angular.forEach(employee.departmentIds, function (departmentId) {
$scope.departments.push(Department.get({ id: departmentId }));
});
});
Проблема в том, что мне нужна эта информация в нескольких контроллерах, и я не хочу повторять этот код в каждом контроллере. Итак, мой вопрос: есть ли способ объединить эти два ресурса в качестве службы, которая предоставляет как данные о сотрудниках, так и данные отделов, к которым принадлежит этот сотрудник?