Ошибка плагина ионной геолокации: "Нет провайдера для геолокации"

Я пытаюсь использовать геолокацию в моем проекте ionic2 hello world, и я добавляю ионный плагин "Geolocation", следуя инструкциям на официальном сайте .

Я запустил эти две команды:

$ ionic plugin add cordova-plugin-geolocation
$ npm install --save @ionic-native/geolocation

И это мой home.ts:

import { Component } from '@angular/core';
import {Geolocation} from '@ionic-native/geolocation'
import { NavController } from 'ionic-angular';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  map:any=null;
  geoInfo:any={
      resp:'',
      data:''
  };

  constructor(
      public navCtrl: NavController,
      private geolocation: Geolocation
  ) {

  }

  test(){
      this.geolocation.getCurrentPosition().then((resp) => {
          this.geoInfo.resp=JSON.stringify(resp);
          // resp.coords.latitude
          // resp.coords.longitude
      }).catch((error) => {
          console.log('Error getting location', error);
          this.geoInfo.resp='Error getting location';
      });

      let watch = this.geolocation.watchPosition();
      watch.subscribe((data) => {
          this.geoInfo.data=JSON.stringify(data);
          // data can be a set of coordinates, or an error (if an error occurred).
          // data.coords.latitude
          // data.coords.longitude
      });

  }

}

Однако в моей консоли Chrome я получил следующую ошибку:

EXCEPTION: Error in ./TabsPage class TabsPage - inline template:0:0 caused by: No provider for Geolocation!
error_handler.js:56ORIGINAL EXCEPTION: No provider for Geolocation!

screenshot

Сначала я подумал, что это потому, что я отлаживался в браузере, но потом я получил ту же ошибку на своем телефоне Android.

Итак, что означает "Нет провайдера для геолокации" и как мне использовать геолокацию в моем проекте ionic2?

Спасибо большое!

Ответы

Ответ 1

Вам нужно добавить поставщика в модуль NgModule, то есть module.ts под провайдерами,

providers: [
  Geolocation
]

Ответ 2

Вам нужно импортировать класс Geolocation и добавить его в список поставщиков в файле app.module.ts.

import { Geolocation } from '@ionic-native/geolocation';

providers: [
     Geolocation
]

Ответ 3

который работал у меня, я импортировал его везде, но забыл добавить его к провайдерам на app.module.ts   app.module.ts

import { Geolocation } from '@ionic-native/geolocation';

providers: [
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler},
AuthService,
EmailValidator,
DataService,
Geolocation
]

то на странице я показывал lat и долго в этом примере в качестве тестового дома;

import { Geolocation } from '@ionic-native/geolocation';
lat: number;
longt: number;

this.geolocation.getCurrentPosition().then((resp) => {
  this.lat = (resp.coords.latitude);
  this.longt =(resp.coords.longitude);
 }).catch((error) => {
   console.log('Error getting location', error);
 });

затем на home.html {{lat}} {{longt}}

Я знаю, что это было просто, но я просто извлекал данные, прежде чем переходить к их размещению на карте.

Ответ 4

У меня была та же проблема, и я сталкиваюсь с этим, что мои родные плагины ядра не были в тех же версиях в моем package.json.

Вы можете проверить это решение и эту другую статью в следующих документах:

https://forum.ionicframework.com/t/cant-resolve-peer-dependencies-after-update/107224/2 https://blog.ionicframework.com/help-test-ionic-native-5/

https://ionicframework.com/docs/native