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