2016-05-23 51 views
0

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

//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 \t \t data 
 
\t 
 
//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

+1

我很惊讶它的工作在所有的,因为它不应该。显然你不明白什么是异步代码。成功和错误回调可以在事件分钟后被调用,并且您立即返回结果。它不应该工作。 – sielakos

回答

1

你必须返回你的诺言返回一个空数组,否则你的对象是在承诺的执行前返回。

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; 
}); 
+0

谢谢!只是调整了我的方法,它的工作。非常感谢。 – JAME