离子 2 地理位置清除观看或取消订阅



所以我正在使用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);
    });
}
  1. AFAIK,有两种方法可以停止监视用户的位置:watch.unsubscribe()Geolocation.clearWatch(watch)。但是,我不知道除了unsubscribe具有Observable类型而另一个是从Geolocation插件导入之外有什么区别。我应该使用哪一个?

  2. 上面的问题其实是微不足道的,我现在最重要的问题是它们都不起作用。 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();

相关内容

  • 没有找到相关文章

最新更新