Ответ 1
Назначение контроллеров - привязка данных к вашему представлению. Они не должны содержать никакой логики и просто общаться с вашими услугами.
homeModule.controller('homeCtrl',function($scope,Categories){
$scope.categories = Categories.items;
});
Добавьте функцию в свою службу, которая извлекает данные и сохраняет их самостоятельно:
fetchAll: function(){
var defer = $q.defer();
var self = this;
$http.get(URL})
.then(function(res){
self.data = res.data;
defer.resolve();
});
return defer.promise;
},
(Обратите внимание, что это всего лишь один из возможных способов сделать что-то. Ничто не мешает вам возвращать данные, а не хранить их в службе. Сделайте то, что вам нужно.)
Если возможно, вам следует рассмотреть возможность получения данных до того, как ваш просмотр будет инициализирован. Поступая таким образом, вы можете обеспечить доступность необходимых данных, как только пользователь получит страницу.
См. $http-запрос перед запуском приложения AngularJS?
Дальнейшее чтение
https://docs.angularjs.org/guide/services (ознакомьтесь с полным руководством разработчика)
http://toddmotto.com/rethinking-angular-js-controllers/
Также я рекомендую официальный Учебник