2016-09-26 53 views
2

我正在研究Ionic2-Angular2-Typescript應用程序。我試圖用科爾多瓦的地理位置插件,但是當我在http://ionicframework.com/docs/v2/native/geolocation/編輯器調用watchPosition方法一樣顯示我的一些錯誤:cordova-plugin-geolocation watchPosition()方法不起作用

錯誤TS2339:房產「代碼」不會對類型「Geoposition存在| PositionError」。

錯誤TS2339:屬性'coords'在類型'Geoposition | PositionError」。

這是我的代碼:

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import 'rxjs'; 
import { Observable } from 'rxjs/Observable'; 
import { Geolocation, PositionError, Geoposition } from 'ionic-native'; 

export class LocationProvider { 

    constructor(private http: Http) {} 

    var subscription = Geolocation.watchPosition() 
          .filter((p) => p.code === undefined) //Filter Out Errors 
          .subscribe(position => { 
    console.log(position.coords.longitude + ' ' + position.coords.latitude); 
}); 
} 

回答

3

最後,我解決我的問題如下:

this.subscription = Geolocation.watchPosition().subscribe(position => { 
    if ((position as Geoposition).coords != undefined) { 
     var geoposition = (position as Geoposition); 
     console.log('Latitude: ' + geoposition.coords.latitude + ' - Longitude: ' + geoposition.coords.longitude); 
    } else { 
     var positionError = (position as PositionError); 
     console.log('Error ' + positionError.code + ': ' + positionError.message); 
    } 
}); 
0

如何只設置回調函數內部的類型?無論如何,如果你對這些錯誤不感興趣,可以使用較短的代碼。

像這樣(未測試):

this.subscription = Geolocation.watchPosition() 
    .filter((p: any) => p['code'] === undefined) // Filter Out Errors 
    .subscribe((position: GeoPosition) => { 
     console.log(position.coords.longitude + ' ' + position.coords.latitude); 
    }); 
+0

我不知道爲什麼,但是這是行不通的。我終於解決了我的問題,因爲我在這裏發佈了答案。檢查位置是Geoposition還是PositionError類型。 –