Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AngularJS : factory $http service

I am trying to understand the concept of factory and service in Angular. I have the following code under the 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);     }; 

This code works fine. But when i move $http service into factory, i am not able to return data back to 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);     }; }); 

Is there any advantage to using factory, since $http works even under controller

like image 566
de-bugged Avatar asked Apr 26 '13 02:04

de-bugged


People also ask

What is $HTTP service in AngularJS?

The $http service is a core AngularJS service that facilitates communication with the remote HTTP servers via the browser's XMLHttpRequest object or via JSONP. For unit testing applications that use $http service, see $httpBackend mock. For a higher level of abstraction, please check out the $resource service.

What is the difference between a service () and a factory ()?

factory() is a method that takes a name and function that are injected in the same way as in service. The major difference between an AngularJS service and an AngularJS factory is that a service is a constructor function and a factory is not.

Can '$ scope be injected while creating service using factory method?

Explanation: No, the '$scope' cannot be injected while creating service using 'factory' method.


1 Answers

The purpose of moving your studentSessions service out of your controller is to achieve separation of concerns. Your service's job is to know how to talk with the server and the controller's job is to translate between view data and server data.

But you are confusing your asynchronous handlers and what is returning what. The controller still needs to tell the service what to do when the data is received later...

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); }); 
like image 111
Brian Genisio Avatar answered Sep 25 '22 04:09

Brian Genisio