获取GeoLocation并订阅服务Angular2 +

时间:2017-07-18 14:44:16

标签: javascript angular google-maps

我使用google map api获取用户的geoLocation,检索lat&信息我想将lat,lng传递给web api服务并获取周围地址的json输出。为了从web api服务获取数据,我使用的angular2代码工作正常。

以下是详细信息的代码:

data.service.ts file:
fetchData(lat: number, lng: number) {
    return this._http.get('/url?lat=' + lat + '&lon=' + lng)
        .map((response: Response) => response.json());
}


app.component.ts

ngOnInit(){

var lat;
    var lng;

    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            lat = position.coords.latitude;
            lng = position.coords.longitude;

        });

if ((lat != null) && (lng != null)) {


this._dataService.fetchData(lat, lng).subscribe(res => {
        this.dObj = res;
    });
}
}

上述代码不起作用。我试着玩代码。 fetchData()之前被调用(我相信,因为它的异步),不知怎的,我无法将lat,lng传递给服务。

有没有正确的方法来实现这一目标?有什么其他方法可以做到这一点?是否有任何angular2库可以使用类似的东西?请帮忙

1 个答案:

答案 0 :(得分:0)

我相信你应该将所有逻辑放在getCurrentPosition()的回调函数中。实际上HTML5地理位置是异步的,所以看起来你试图在回调发生之前检索latlng

试试这个

var lat;
var lng;

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition( position => {
        lat = position.coords.latitude;
        lng = position.coords.longitude;

        if ((lat != null) && (lng != null)) {

            this._dataService.fetchData(lat, lng).subscribe(res => {
                this.dObj = res;
            });
        }
    });
}