AngularJS: servizio $ factory in fabbrica

Sto cercando di capire il concetto di fabbrica e servizio in Angular. Ho il seguente codice sotto il controller

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

Questo codice funziona bene. Ma quando sposto il servizio $ http in fabbrica, non sono in grado di restituire i dati al controller.

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

C’è qualche vantaggio nell’usare la fabbrica, dal momento che $ http funziona anche sotto il controller

Lo scopo di spostare il tuo servizio studentSessions dal tuo controller è quello di ottenere una separazione delle preoccupazioni. Il lavoro del tuo servizio è sapere come parlare con il server e il lavoro del controllore è tradurre tra dati di visualizzazione e dati del server.

Ma stai confondendo i tuoi gestori asincroni e cosa sta restituendo cosa. Il controller deve ancora dire al servizio cosa fare quando i dati vengono ricevuti in un secondo momento …

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

La prima risposta è ottima ma forse puoi capirlo:

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

Poi:

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