使用从服务到控制器的数据的问题
Problems using data from Service to Controller
我有一个服务和几个控制器。
该服务发出 post 请求,控制器假设使用从服务器发回的数据。
不幸的是,RightsMainService.rightsArray returns 一个包含对象的数组,每个对象只有 "undefined" 个字段。
此外,RightsMainService.init 始终为假。
不知道问题出在哪里。
app.service('RightsMainService', ['$http', '$rootScope', '$state', function($http, $rootScope, $state) {
var self = this;
this.rightsArray = [];
this.init = false;
this.loadRights = function(rightsObject) {
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
}
};
$http.post('./server/user.php', $.param(rightsObject), config)
.success(function(data,status, headers, config) {
self.rightsArray = data;
self.init = true;
$rootScope.$broadcast('finishLoadingEvent');
})
.error(function(data, status, header, config) {
alert(status + " " + header);
return;
});
$state.go('rights');
}
}]);
app.controller('RightsMainCtrl', ['$scope', '$rootScope', 'RightsMainService', function($scope, $rootScope, RightsMainService) {
var rightsArrayInitialized = false;
var rightsArray = [];
(function Initialize(){
if(RightsMainService.init == false) {
alert("init");
$rootScope.$on('finishLoadingEvent', function() {
rightsArrayInitialized = true;
rightsArray = RightsMainService.rightsArray;
for(var key in rightsArray[0]) {
alert(rightsArray[key]);
}
})
} else {
rightsArrayInitialized = true;
rightsArray = RightsMainService.rightsArray;
for(var key in rightsArray[0]) {
alert(rightsArray[key]);
}
}
})();
}]);
请忽略这些警报,它们用于测试目的
您在 $http
完成之前调用 $state.go('rights');
。整个流程真的没有意义。
我有一个服务和几个控制器。
该服务发出 post 请求,控制器假设使用从服务器发回的数据。
不幸的是,RightsMainService.rightsArray returns 一个包含对象的数组,每个对象只有 "undefined" 个字段。
此外,RightsMainService.init 始终为假。
不知道问题出在哪里。
app.service('RightsMainService', ['$http', '$rootScope', '$state', function($http, $rootScope, $state) {
var self = this;
this.rightsArray = [];
this.init = false;
this.loadRights = function(rightsObject) {
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
}
};
$http.post('./server/user.php', $.param(rightsObject), config)
.success(function(data,status, headers, config) {
self.rightsArray = data;
self.init = true;
$rootScope.$broadcast('finishLoadingEvent');
})
.error(function(data, status, header, config) {
alert(status + " " + header);
return;
});
$state.go('rights');
}
}]);
app.controller('RightsMainCtrl', ['$scope', '$rootScope', 'RightsMainService', function($scope, $rootScope, RightsMainService) {
var rightsArrayInitialized = false;
var rightsArray = [];
(function Initialize(){
if(RightsMainService.init == false) {
alert("init");
$rootScope.$on('finishLoadingEvent', function() {
rightsArrayInitialized = true;
rightsArray = RightsMainService.rightsArray;
for(var key in rightsArray[0]) {
alert(rightsArray[key]);
}
})
} else {
rightsArrayInitialized = true;
rightsArray = RightsMainService.rightsArray;
for(var key in rightsArray[0]) {
alert(rightsArray[key]);
}
}
})();
}]);
请忽略这些警报,它们用于测试目的
您在 $http
完成之前调用 $state.go('rights');
。整个流程真的没有意义。