컨트롤러가 나머지 작업을 수행하기 전에 서비스 $ http 결과를 기다리고 싶습니다. myData에 대한 일부 하드 코딩 된 JSON을 테스트했지만 컨트롤러에 표시되어 있지만 $ http 요청으로 myData를 채우 자마자 컨트롤러가 기다리지 않고 나머지 코드를 통해 걷습니다. Chrome webdevelopper의 네트워크 탭에 요청에 대한 예상 결과가 표시됩니다. 여기에 내가 일반적으로 당신이 적절하게 모든 약속을 반환 할 필요는 routeProvider 내 해결 객체에서 할 무엇
var ListerApp = angular.module('ListerApp',[
'ListerAppFilters',
'sharedFactoryApp',
'sharedServiceApp',
'ListerAppController',
'infinite-scroll',
'angular-inview',
'ngRoute'
]);
ListerApp.config(['$routeProvider', '$httpProvider', function($routeProvider, $locationProvider) {
$routeProvider
.when('/list',
{
templateUrl: '/assets/services/partials/list.html',
controller: 'ListerCtrl',
resolve : {
'sharedServiceAppData': function($sharedServices){
// sharedFactoryAppData will also be injectable in your controller, if you don't want this you could create a new promise with the $q service
return $sharedServices.promise();
}
}
}
);
}]);
angular.module('sharedServiceApp', []).service('$sharedServices', ['$http', '$rootScope', '$q', function($http, $rootScope, $q) {
var myData = null;
return {
promise : function() {
if (!myData) {
$http({method : 'GET', url : '/shop/api/json', params : {
end : $rootScope.endmarkerSyncDataset,
page : 1,
per_page : $rootScope.itemsPerPage
}
}).success(function (data) {
myData = data.data_set;
//deferred.resolve(data.data_set);
});
// I allready tested this and this is OK: myData = {foo : 'bar'};
}
},
getShopData: function() {
return myData;
}
};
}]);
(function(){
var appController = angular.module('ListerAppController', []);
appController.controller('ListerCtrl', ['$scope', '$rootScope', '$http', '$filter', '$timeout', '$sharedFactories', '$sharedServices',
function($scope, $rootScope, $http, $filter, $timeout, $sharedFactories, $sharedServices) {
$scope.items = $sharedServices.getShopData();
console.log($scope.items); // return myData -> null
}
})();
도움 주셔서 감사합니다. 나는 무엇인가를 발견하고 그것을 아래에 게시했다. 귀하의 예제는 api-like 오브젝트를 생성하는 데 더 도움이됩니다. – poashoas