6

Ich versuche, einen Dienst zu erstellen, um Json zu erhalten und es mir zu übergeben HomeCtrl Ich kann die Daten abrufen, aber wenn es an meine HomeCtrl übergeben, gibt es immer undefined zurück. Ich stecke fest.AngularJS: Daten vom Dienst zum Controller

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

Antwort

18

Sie sollten Versprechen von getResponders Funktion zurückgeben, & wenn es gelöst wird es response.data von dieser Funktion zurückkehren.

Fabrik

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

auch in Ihrem Controller Sie die Factory-Funktion und verwenden .then Funktion aufrufen sollte, um es zu nennen, wenn die getResponders Servicefunktion der $http.get Anruf und weisen Sie die data zu $scope.gotData

löst

Code

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

}; 
+1

Was gut funktionieren, wenn ich '$ scope.goData' wollte Daten zurück? Denn wenn ich eine andere Variable innerhalb von $ scope.goData initiiere und sie dann gleich data oder $ scope.gotData mache, würde sie zurückgegeben werden, bevor sie den valye bekommt. –

+0

Nicht sicher, wie diese Antwort funktioniert, habe sie benutzt und nichts wird zurückgegeben in den Controller [Gist] (https://gist.github.com/wsfuller/4ca2b11748279a16c64dba0cb8032f81) –

+1

Hey Kumpel, danke für den Kopf .. Ich korrigierte meinen Code jetzt .. bitte überprüfen aktualisiert –

2

Dies ist ein Beispiel, wie ich für mein Projekt habe, ist es für mich

var biblionum = angular.module('biblioApp', []);//your app 
 
biblionum.service('CategorieService', function($http) { 
 

 

 
    this.getAll = function() { 
 

 
     return $http({ 
 
      method: 'GET', 
 
      url: 'ouvrage?action=getcategorie', 
 
      // pass in data as strings 
 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'} // set the headers so angular passing info as form data (not request payload) 
 
     }) 
 
       .then(function(data) { 
 

 
        return data; 
 

 

 
       }) 
 

 

 
    } 
 

 

 
}); 
 

 
biblionum.controller('libraryController', function($scope,CategorieService) { 
 
    
 
    var cat = CategorieService.getAll(); 
 
    cat.then(function(data) { 
 
     $scope.categories = data.data;//don't forget "this" in the service 
 
    }) 
 

 
    });

Verwandte Themen