2016-04-20 12 views
2

Hallo Ich habe einen Dienst erstellt, der einen JSON von einem Remote-Server bekommt, nicht ich muss das Ergebnis und legen Sie es als eine Eigenschaft des Dienstes, aber ich nicht wissen, wie die Eigenschaft aus der Funktion

app.service('varService',['$http', function($http){ 
    var ip = myip; 
    window.city = ''; 
    $http.get('http://ip-api.com/json/'+ip) 
    .then(function(data) { window.city = data.data.city; }); 

    this.city=city; 
}]); 

Eigentum this.city keinen Wert erhalten zu bekommen, aber wenn ich console.log innerhalb .then() der Wert vorhanden ist, wie löse ich das Problem, wie kann ich Wert erhalten aus ?

Antwort

0

Dort können Sie keine Datenrückgabe durch Ajax erhalten, sobald Sie diese Codezeile ausführen, sollten Sie .then Rückruf verwenden, um Daten dort zu erhalten. Sie könnten .then über $ http Aufruf verwenden, um Daten von Ajax zu erhalten.

app.service('varService',['$http', function($http){ 
    var ip = myip; 
    var self = this; 
    self.getCity = function(){ 
     return $http.get('http://ip-api.com/json/'+ip) 
     .then(function(data) { 
      self.city = data.data.city; 
      return self.city; //do return city retrieved 
     }); 
    } 
}]); 
1

Da $http.get eine Zusage zurückgibt, wenn Sie den Stadtwert zuweisen, ist die Anforderung vom Webserver noch nicht tatsächlich zurückgegeben worden.

Sie müssen das Versprechen von Ihrem Dienst zurückgeben und stattdessen Ihre .then() Callback-Handler in Ihrem aufrufenden Controller behandeln.

app.service('varService',['$http', function($http){ 
    var ip = myip; 
    this.getIp = $http.get('http://ip-api.com/json/'+ip); 
}]); 

// controller 
varService.getIp.then(function(data) { window.city = data.data; }); 

Dies ist der empfohlene Ansatz der John Papa AngularJS Styleguide und ermöglicht es Ihnen, zusammen mehrere Versprechen an die Kette.

+0

Dank, aber die Sache ist, dass ich this.city zwischen mehreren Controllern teilen, so dass es im Inneren des varService eingestellt werden müssen l – Mikail

Verwandte Themen