AngularJS: serviço $ http de fábrica

Estou tentando entender o conceito de fábrica e serviço em Angular. Eu tenho o seguinte código sob o controlador

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

Este código funciona bem. Mas quando eu transfiro o serviço $ http para a fábrica, não consigo devolver os dados ao controlador.

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

Existe alguma vantagem em usar a fábrica, pois o $ http funciona mesmo sob o controlador

O propósito de mover seu serviço de studentSessions para fora do seu controlador é alcançar a separação de interesses. O trabalho do seu serviço é saber como falar com o servidor e o trabalho do controlador é traduzir entre os dados da visualização e os dados do servidor.

Mas você está confundindo seus manipuladores asynchronouss e o que está retornando. O controlador ainda precisa informar ao serviço o que fazer quando os dados forem recebidos depois …

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

A primeira resposta é ótima, mas talvez você possa entender isso:

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

Então:

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