我想创建一个服务,我可以获取当前位置。 我想把它放在一个服务中,这样我就可以在几个组件中使用这个位置。
问题在于,当我尝试这个时,我的组件尝试在google maps完成ajax调用之前获取lat和lon。
有人有解决此问题的方法吗?
setCurrentPosition() {
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition((position) => {
this.latitude = position.coords.latitude;
this.longitude = position.coords.longitude;
this.zoom = 12;
return this.latitude, this.longitude ;
});
}
}
这就是我如何获得我在服务中的位置。 我的组件想要很快使用纬度和经度,因为ajax调用hasn`t jet检索信息。我该如何解决这个问题?
答案 0 :(得分:1)
在你甚至可以使用承诺之前,你是否曾使用过承诺?当api得到lat和lng时,承诺将解决。你可以打电话给api
this.setCurrentPosition().then((response)=>{
this.lat = response.latitude;
this.lng = response.longitude;
});
setCurrentPosition() {
return new Promise((resolve, reject) => {
if ("geolocation" in navigator) {
navigator.geolocation.getCurrentPosition((position) => {
let res = {
latitude: position.coords.latitude,
longitude:position.coords.latitude
}
resolve(res);
});
}
});
}
答案 1 :(得分:0)
将您的函数编写为可观察的amd,从您的组件订阅它,这样一旦该服务返回纬度和经度,它就会获得值。请参阅https://angular-2-training-book.rangle.io/handout/observables/using_observables.html