所以我正在使用Google Maps和Ionic 2。Cordova有一个用于检索用户地理位置的插件,我对插件有两个问题。
但在我陈述我的问题之前,这是我的代码
import { Geolocation } from 'ionic-native';
watchPosition(marker) {
let watch = Geolocation.watchPosition({
//enableHighAccuracy: true
});
watch.subscribe((pos) => {
marker.setPosition({
lat: pos.coords.latitude,
lng: pos.coords.longitude
});
});
// stop watching if the user starts dragging the map
this.map.addListener('dragstart', () => {
// There might be two ways to do this, but non of them works
watch.unsubscribe();
Geolocation.clearWatch(watch);
});
}
AFAIK,有两种方法可以停止监视用户的位置:
watch.unsubscribe()
和Geolocation.clearWatch(watch)
。但是,我不知道除了unsubscribe
具有Observable
类型而另一个是从Geolocation
插件导入之外有什么区别。我应该使用哪一个?上面的问题其实是微不足道的,我现在最重要的问题是它们都不起作用。
watch.unsubscribe()
给出[ts] Property 'unsubscribe' does not exist on type 'Observable<Geoposition>'.
和Geolocation.clearWatch(watch)
给我的错误[ts] Property 'clearWatch' does not exist on type 'typeof Geolocation'.
我错过了什么吗?
如果您查看地理位置插件的 Ionic Native Typescript 包装器,您可以看到:
- 它不直接公开
clearWatch()
函数 - 它的
watchPosition()
包装器返回一个可观察量,其unsubscribe()
操作是使用内部watchId
在地理位置插件上调用clearWatch()
。因此,Ionic Native 清除手表的方法是在Geolocation.watchPosition()
返回的可观察量上调用unsubscribe()
。
但是,如果由于某种原因不起作用,您可以直接调用插件 API:
declare var navigator: any;
// Add watch
let watchId = navigator.geolocation.watchPosition((position) => {
// do something with position
} , (error) => {
// do something with error
}), options);
// Clear watch
navigator.geolocation.clearWatch(watchId);
即使有点晚了...
- watchPosition(( 返回一个 Observable
- 您可以订阅此可观察量
- 订阅(( 调用返回订阅
- 从订阅中,您可以取消订阅((
把所有的东西放在一起:
let subscription = this.geolocation.watchPosition().subscribe(
(position) => { ... },
);
...
subscription.unsubscribe();