0

So ziemlich habe ich einen Dienst, der Funktionen für einige REST-Methodenaufrufe über den $ http-Dienst in AngularJS enthält. Diese Methoden werden dann im Controller aufgerufen und aufgerufen.

Wenn die Methode über den Controller aufgerufen wird, sind die Daten, die im Service auf der Konsole ausgegeben werden, das erwartete JSON-Objekt. Aber sobald diese Funktion Daten an den Controller zurückgibt, wird sie undefiniert.

Ich bin mir nicht sicher, was der Grund dafür ist, und würde gerne einen Einblick in das, warum dies passiert, hat es mit Scoping oder Garbage Collection zu tun?

Danke!

hier die So-Service 'Hub'

this.getAllHubs = function() { 
    $http({ 
     method: 'GET', 
     url: 'https://****.com', 
    }).then(function successCallback(response) { 
     console.log('In hub.js ' + JSON.stringify(response.data)); 
     this.hubs = response.data; 
     return response.data; 
    }, function errorCallback(response) { 
     // Error response right here 
    }); 
    }; 

, um die erste Ausgabe der Konsole druckt das Objekt richtig ist Code der Steuerung und hier

erwartet

app.controller('HubCtrl', HubCtrl); 

HubCtrl.$inject = ['$scope','hub']; 

function HubCtrl($scope,hub) { 
    $scope.hubs = hub.getAllHubs(); 
    console.log('In ctrl ' + $scope.hubs); 

    $scope.addHub = function(_hub) { 
    console.log('In Ctrl ' + _hub); 
    hub.addHub(_hub); 
    }; 
} 

Antwort

2

Sie nicht zurückkehrte die Daten von der Funktion this.getAllHubs.

this.getAllHubs = function() { 
    return $http({    // Put a return here 
     method: 'GET', 
     url: 'https://****.com', 
    }).then(function successCallback(response) { 
     console.log('In hub.js ' + JSON.stringify(response.data)); 
     this.hubs = response.data; 
     return response.data; 
    }, function errorCallback(response) { 
     // Error response right here 
    }); 
    }; 

Und das ist nicht genug, denn der Rückgabewert ist eigentlich ein $q Promise, den Wert der Versprechen zu verwenden:

function HubCtrl($scope,hub) { 
    // getAllHubs() now returns a promise 
    var hubsPromise = hub.getAllHubs(); 

    // We have to '.then' it to use its resolved value, note that this is asynchronous! 
    hubsPromise.then(function(hubs){ 
    $scope.hubs = hubs; 
    console.log('In ctrl ' + $scope.hubs); 
    }); 

    $scope.addHub = function(_hub) { 
    console.log('In Ctrl ' + _hub); 
    hub.addHub(_hub); 
    }; 
} 
+1

, dass es mein Freund war, ich danke Ihnen für die Zeit nehmen, um zu helfen ich, ich schätze es wirklich! Genießen Sie den Rest Ihrer Nacht/Tag! – Michael