Search code examples
angularjsangularjs-serviceangular-promiseangularjs-factoryangularjs-http

AngularJS : returning data from service to controller


I am trying to create a service to get json and pass it to me homeCtrl I can get the data but when a pass it to my homeCtrl it always returns undefined. Im stuck.

My Service:

var myService = angular.module("xo").factory("myService", ['$http', function($http){
  return{
    getResponders: (function(response){
      $http.get('myUrl').then(function(response){
         console.log("coming from servicejs", response.data);
      });
    })()
  };
  return myService;
  }
]);

My Home Controller:

var homeCtrl = angular.module("xo").controller("homeCtrl", ["$rootScope", "$scope", "$http", "myService",
function ($rootScope, $scope, $http, myService) {
 $scope.goData = function(){
     $scope.gotData = myService.getResponders;
 };
 console.log("my service is running", $scope.goData, myService);
}]);

Solution

  • You should return promise from getResponders function, & when it gets resolved it should return response.data from that function.

    Factory

    var myService = angular.module("xo").factory("myService", ['$http', function($http) {
        return {
            getResponders: function() {    
                return $http.get('myUrl')
                .then(function(response) {
                    console.log("coming from servicejs", response.data);
                    //return data when promise resolved
                    //that would help you to continue promise chain.
                    return response.data;
                });
            }
        };
    }]);
    

    Also inside your controller you should call the factory function and use .then function to get call it when the getResponders service function resolves the $http.get call and assign the data to $scope.gotData

    Code

     $scope.goData = function(){
         myService.getResponders.then(function(data){
              $scope.gotData = data;
         });
    
     };