2016-07-06 134 views
0

当运行在我的离子2项目下面的代码:离子2监视位置误差

let options ={ 
    maximumAge: 3000, 
    timeout: 5000, 
    enableHighAccuracy: true 
} 


let geoWatch = Geolocation.watchPosition(options); 
geoWatch.subscribe((data) => { 
    alert("watch"); 

}) 

即时得到一个错误说: 类型错误:无法执行对“地理位置”“watchPosition”:提供的回调因为参数2不是一个函数。

我认为这与wathchposition函数的非Ionic本地语法有关,它需要成功和错误函数作为参数。

任何人知道如何解决这个问题?

回答

0

TypeError: Failed to execute 'watchPosition' on 'Geolocation': The callback provided as parameter 2 is not a function.

你说的对,这些参数都是错误的:

id = navigator.geolocation.watchPosition(success, error, options) 

这么一两件事你可以尝试是这样做的:

let geoWatch = Geolocation.watchPosition(options, subscribeToPosition, showError); 

// Success callback 
private subscribeToPosition(positionObj): void { 
    this.data = positionObj; 
    console.log(positionObj); 
} 

// Error callback 
private showError(errorObj): void { 
    // Handle the error. 
    console.log(errorObj); 
} 

======== ==============================

编辑:

我虽然我们采取了约navigator.Geolocation API,但在那(真棒)后乔希是使用地理位置科尔多瓦插件通过Ionic Native(对不起,我的坏)。

我可以看到in the documentation

This API is based on the W3C Geolocation API Specification, and only executes on devices that don't already provide an implementation. 

所以我认为你应该检查,如果你在一个Web应用程序(通过做this.platform.is('core'))是,如果你是,那么你需要添加以前sintax(带回调)。但是,如果这是false,那么您知道您的应用正在移动设备上执行,并且您可以像使用代码一样使用ionic-native sintax。我担心你需要在真实的设备中测试它,只是为了确保。

+0

是真的,但我想保留我正在使用的打字稿语法。我遇到了一堆使用与我相同的代码的例子,但是似乎没有相同的错误 – vrijdrogenaam

+0

但是通过传递回调(在typescript sintax中定义)来调用方法也是打字稿。您可以添加这些代码示例的链接,以便我们可以看看它们吗?必须有我们缺少的东西... – sebaferreras

+0

在这里你去! http://www.joshmorony.com/adding-background-geolocation-to-an-ionic-2-application/ – vrijdrogenaam

0

更新到Ionic-Native 1.3.20解决了我的问题