为什么在此代码中 -> JSON与Angular and PHP获取,服务返回一个空数组,但是如果我写:
angular.module('pageModule')
.factory('pageService', function($http){
var pagesArray = new Array();
return{
pagesArray: pagesArray,
load: function(){
$http.get('../angCMS/server/php/page.php')
.success(function(res){
pagesArray.push(res);
});
}
};
});
控制器:
angular.module('pageModule')
.controller('pageController', ['$scope', 'homeService', 'pageService', function($scope, homeService, pageService){
$scope.pages = pageService.pagesArray;
pageService.load();
}]);
一切都很好?
为什么不等待呼叫。利用$ HTTP返回的承诺。
工厂:
// Original
angular.module('pageModule')
.factory('pageService', function($http){
var pagesArray = new Array();
return{
pagesArray: pagesArray,
load: function(){
$http.get('../angCMS/server/php/page.php')
// Success is deprecated use then and catch
.success(function(res){
pagesArray.push(res);
});
}
};
});
// Changed
angular.module('pageModule')
.factory('pageService', function($http){
var pagesArray = new Array();
return{
pagesArray: pagesArray,
load: function(){
return $http.get('../angCMS/server/php/page.php')
.then(function(res){
pagesArray.push(res);
return pagesArray;
});
}
};
});
控制器:
//Original
angular.module('pageModule')
.controller('pageController', ['$scope', 'homeService', 'pageService', function($scope, homeService, pageService){
$scope.pages = pageService.pagesArray;
pageService.load();
}]);
//Changed
angular.module('pageModule')
.controller('pageController', ['$scope', 'homeService', 'pageService', function($scope, homeService, pageService){
$scope.pages = [] //Initiale state;
//Make use of the HTTP promise that is returned in the load
pageService.load()
.then(function (pages) {
$scope.pages = pages;
})
.catch(function (error) {
//Handle error
console.log(error);
});
}]);