Javascript angular js从$http中取出变量是服务
您好,我已经创建了一个从远程服务器获取json的服务,我不需要获取结果并将其设置为服务的属性,但我不知道如何从函数中获取属性Javascript angular js从$http中取出变量是服务,javascript,angularjs,Javascript,Angularjs,您好,我已经创建了一个从远程服务器获取json的服务,我不需要获取结果并将其设置为服务的属性,但我不知道如何从函数中获取属性 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
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;
}]);
属性
this.city
没有收到任何值,但是当我在控制台中执行操作时。log
在中。then()
值存在,如何解决问题,如何从$http.then()
中获取值?因为$http.get
在分配city值时返回一个承诺,该请求实际上尚未从web服务器返回
您需要从服务中返回承诺,并在调用控制器中处理.then()
回调处理程序
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; });
这是推荐的方法,它允许您将多个承诺链接在一起。如果您无法通过ajax获得数据返回,那么您应该使用。然后使用回调在那里检索数据。您可以使用。然后通过$http调用从ajax获取数据
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
});
}
}]);
谢谢,但问题是我在多个控制器之间共享这个.city,所以我需要在varService中设置它