Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular js从$http中取出变量是服务_Javascript_Angularjs - Fatal编程技术网

Javascript angular js从$http中取出变量是服务

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

您好,我已经创建了一个从远程服务器获取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.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中设置它