AngularJS:工厂$ http服务

我正在尝试了解Angular的工厂和服务的概念。 我在控制器下面有下面的代码

init(); function init(){ $http.post('/services', { type : 'getSource', ID : 'TP001' }). success(function(data, status) { updateData(data); }). error(function(data, status) { }); console.log(contentVariable); }; function updateData(data){ console.log(data); }; 

这段代码工作正常。 但是当我移动$ http服务到工厂,我不能够返回数据回控制器。

 studentApp.factory('studentSessionFactory', function($http){ var factory = {}; factory.getSessions = function(){ $http.post('/services', { type : 'getSource', ID : 'TP001' }). success(function(data, status) { return data; }). error(function(data, status) { }); }; return factory; }); studentApp.controller('studentMenu',function($scope, studentSessionFactory){ $scope.variableName = []; init(); function init(){ $scope.variableName = studentSessionFactory.getSessions(); console.log($scope.variableName); }; }); 

使用工厂有什么好处,因为即使在控制器下,$ http也能工作

将您的studentSessions服务移出您的控制器的目的是为了实现问题的分离。 您的服务的工作是知道如何与服务器交谈,控制器的工作是在视图数据和服务器数据之间进行转换。

但是你混淆了你的asynchronous处理程序,什么是返回什么。 控制器仍然需要告诉服务稍后收到数据时要执行的操作。

 studentApp.factory('studentSession', function($http){ return { getSessions: function() { return $http.post('/services', { type : 'getSource', ID : 'TP001' }); } }; }); studentApp.controller('studentMenu',function($scope, studentSession){ $scope.variableName = []; var handleSuccess = function(data, status) { $scope.variableName = data; console.log($scope.variableName); }; studentSession.getSessions().success(handleSuccess); }); 

第一个答案很好,但也许你可以理解这一点:

 studentApp.factory('studentSessionFactory', function($http){ var factory = {}; factory.getSessions = function(){ return $http.post('/services', {type :'getSource',ID :'TP001'}); }; return factory; }); 

然后:

 studentApp.controller('studentMenu',function($scope, studentSessionFactory){ $scope.variableName = []; init(); function init(){ studentSessionFactory.getSessions().success(function(data, status){ $scope.variableName = data; }); console.log($scope.variableName); }; });