angularjs $http.um json funktioniert nicht in der service-Schicht

Ich bin die Entwicklung einer angularjs-app als einen Teil meines angularjs lernen. Ich habe Controller und von dort rufe ich die service-Ebenen.

leagueManager.service("teamsService", function($http){
    var teams = {};
        $http.get('data/teams.json').then(function(data) {
        teams = data;
    });
    this.getTeams = function(){
        return teams;
    };

});

Bemerkte ich, dass aufgrund der asynchronen Natur des $http.bekommen.dann Sachen, werden die Daten nicht sofort abgerufen und daher würde ich nicht die "teams", wenn ich Sie nennen würde-getTeams() von der Steuereinheit (teamsController), würde ich nichts bekommen.

Irgendeine Idee, wie kann ich dies beheben?

Zweiter Versuch:
Nach der Lektüre über latente und verspricht auf eckig als angeregt durch den post weiter unten, ich habe versucht, nach, hat aber noch keine Wirkung. Meine variable teams nicht füllt, wie ich will, und Sie sind aufgefüllt, und danach wird nicht helfen, in meinem UI:

Mein controller teamsController.js

leagueManager.controller('teamsController', function($scope, $location, teamsService, $routeParams){
//init function to initialize data when controller is called everytime.
var init = function(){
        $scope.teams = [];
        var promise = teamsService.getTeams();
        promise.then(
        function(data){
            console.log("teams after promise:="+data);
            $scope.teams = data;
        }
        ,function(reason)
        {
                alert('Failed: ' + reason);
        }
        );
        console.log("teams in the scope:="+$scope.teams);
};

init();
});

Und hier ist mein ServiceLayer teamsService.js

leagueManager.service("teamsService", function($http, $q){
this.getTeams = function(){
  var deferred = $q.defer();
     var url = 'data/teams.json';
     $http.get(url).success(function(data, status) {
         //Some extra manipulation on data if you want...
         deferred.resolve(data);
     }).error(function(data, status) {
         deferred.reject(data);
     });
     return deferred.promise;
}
});

Können Sie oder jemand mir helfen, was ich falsch mache?
Dies ist, was gedruckt wird, in der browser-Konsole nach Ausführung:

teams im Bereich:= teamsController.js:27

teams nach der Verheißung:=[object object],[object object],[object object],[object object],[object object]

Dies einfach zeigt, dass ich tun, um das json-Objekt, aber nicht an der Zeit, die ich möchte. Für einige Grund diese latente/Versprechen Ding hatte keine Auswirkungen.

BITTE HELFEN, DIESES NEUE ECKIGE ENTHUSIASTEN

Ich erstellte ein JsFiddle-Beispiel, das ist fast das gleiche wie das, was du suchst: jsfiddle.net/sravikiran/HYxC8/3. Überprüfen Sie es und vergleichen Sie es mit Ihrem code. Ich check dein Problem, aber einige Zeit brauchen.
Vielen Dank S. Ravi Kiran, Ihr jsfiddle hat mir geholfen, Debuggen das problem. Das Versprechen und verzögern Logik war in Ordnung, aber es war auch meine anderen Teil des Codes, der gab mir Probleme, die ich behoben.
Schön zu wissen, dass 🙂

InformationsquelleAutor cooler | 2013-09-12

Schreibe einen Kommentar