$ http工厂只在第一个控制器上工作

时间:2016-05-23 14:45:07

标签: angularjs angular-services angular-controller

我有一个工厂正在获取数据并将其返回给控制器。它适用于第一个控制器,但在第二个控制器上不返回任何内容。我的印象是我可以将它传递给所有控制器。有一分钟,我想也许它只能被实例化一次,所以我用相同的步骤创建了另一个工厂。还是一样的结果。它在第二个控制器中返回一个空数组



//Factory

angular.module('myApp')
    .factory('classData', function($http){

      return {

        getClassData : function() {

          var studentData = [ ];

          $http({
            method: 'GET',
            url: 'theUrl'
          }).success(function(data){

            for(var i = 0; i < data.length; i++)
              studentData.push(data[i]);

          }).error(function(){
            alert("error", error);
          });

          return studentData;

        }
      };
    });


//Controller 1:

angular.module('myApp')
  .controller('studentListCtrl', function($scope, classData, statService) { //this controller is just view logic

    $scope.sortType     = 'attendanceYtd';
    $scope.searchStudent   = '';
    $scope.students = classData.getClassData(); //returns all 		data
	
//Controller 2: 

angular.module('attendanceApp')
  .controller('studentHistoryCtrl', function($scope, $stateParams, classData) {
    //get all  data
    $scope.students = classData.getClassData();
    console.log($scope.students); //returning an empty array
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

您必须返回您的承诺,否则在执行承诺之前返回您的对象。

angular.module('myApp')
    .factory('classData', function($http){

      return {

        getClassData : function() {

          var studentData = [ ];

          return $http({
            method: 'GET',
            url: 'theUrl'
          }).then(function(data){
            for(var i = 0; i < data.length; i++)
              studentData.push(data[i]);
            return studentData;
          }, function(){
            alert("error", error);
          });


        }
      };
    });

然后,在您的控制器中,使用您的承诺:

classData.getClassData().then(function(results){
    $scope.students = result;
});