AngularJS和PHP通信服务



为什么在此代码中 -> 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);
    });
}]);

最新更新