Ionic 2.0 — добавить плагины в модуль приложения — неверный синтаксис?

Я пытаюсь добавить собственный плагин Geolocation Ionic в свое приложение Ionic 2.0.

Согласно инструкциям здесь, я импортировал плагин геолокации и пытаюсь добавить его к массиву «поставщиков» в моем декораторе AppModule, но я получаю синтаксическую ошибку:

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

@NgModule({
  declarations: [
    MyApp,
    BasketPage,
    AccountPage,
    AccountCreationPage,
    CategoriesPage,
    TabsPage,
    LandingPage,
    CategoryPage,
    ProductPage
  ],
  imports: [
      IonicModule.forRoot(MyApp),
      HttpModule
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    BasketPage,
    AccountPage,
    AccountCreationPage,
    CategoriesPage,
    TabsPage,
    LandingPage,
    CategoryPage,
    ProductPage
  ],
  providers: [
      Geolocation,
      { provide: ErrorHandler, useClass: IonicErrorHandler }
  ]
})
export class AppModule {}

Массив провайдеров, кажется, принимает только объект со свойствами «provide» и «useClass», поэтому добавление объекта Geolocation не сработало.

Кроме того, если вы проверите документацию Ionic, массив поставщиков выглядит иначе, чем мой? Это почему? Когда я проверил документацию Ionic, там было только две версии — v1 и «последняя».

Что я здесь делаю неправильно?

Сообщение об ошибке, которое я получаю, когда средство запуска задач создает приложение, выглядит следующим образом (хотя Visual Studio все равно выделяет синтаксическую ошибку красным цветом):

12:56:37] машинопись: …rce/Repos/Aise/Aise/AiseMobile/node_modules/@ionic-native/geolocation/index.d.ts, строка: 127 Тип «любой» не является типом функции-конструктора. L127: экспортировать объявление класса Geolocation extends IonicNativePlugin {

Для справки, вот вывод команды ionic info:

пакеты cli: (C:\Users\ciara\Source\Repos\Aise\Aise\AiseMobile\node_modules)

@ionic/cli-utils: 1.9.2 ionic (Ionic CLI): 3.9.2 глобальные пакеты:

Cordova CLI: локальные пакеты 7.0.1:

@ionic/app-scripts: 1.1.0 Платформы Cordova: android 6.2.3 Ionic Framework: ionic-angular 2.0.1 Система:

Инструменты Android SDK: 25.2.3 Узел: v6.10.3 npm
: 3.10.10 ОС: Windows 10

Мой package.json:

{
  "name": "io.cordova.myappeaf9db",
  "author": "",
  "homepage": "",
  "private": true,
  "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve",
    "watch": "ionic-app-scripts watch"
  },
  "dependencies": {
    "@angular/common": "2.2.1",
    "@angular/compiler": "2.2.1",
    "@angular/compiler-cli": "2.2.1",
    "@angular/core": "2.2.1",
    "@angular/forms": "2.2.1",
    "@angular/http": "2.2.1",
    "@angular/platform-browser": "2.2.1",
    "@angular/platform-browser-dynamic": "2.2.1",
    "@angular/platform-server": "2.2.1",
    "@ionic-native/geolocation": "^4.2.1",
    "@ionic/storage": "1.1.7",
    "cordova-android": "^6.2.3",
    "cordova-plugin-compat": "^1.0.0",
    "cordova-plugin-console": "1.0.5",
    "cordova-plugin-device": "1.1.4",
    "cordova-plugin-geolocation": "^2.4.3",
    "cordova-plugin-splashscreen": "~4.0.1",
    "cordova-plugin-statusbar": "2.2.1",
    "cordova-plugin-whitelist": "1.3.1",
    "ionic-angular": "2.0.1",
    "ionic-native": "2.4.1",
    "ionic-plugin-keyboard": "~2.2.1",
    "ionicons": "3.0.0",
    "jsonpath": "0.2.12",
    "rxjs": "5.0.0-beta.12",
    "sw-toolbox": "3.4.0",
    "zone.js": "0.6.26"
  },
  "devDependencies": {
    "@ionic/app-scripts": "1.1.0",
    "@ionic/cli-plugin-ionic-angular": "1.2.0",
    "typescript": "2.0.9"
  },
  "description": "Ionic2Tabs: An Ionic project",
  "cordovaPlugins": [
    "cordova-plugin-whitelist",
    "cordova-plugin-console",
    "cordova-plugin-statusbar",
    "cordova-plugin-device",
    "cordova-plugin-splashscreen",
    "ionic-plugin-keyboard"
  ],
  "cordovaPlatforms": [],
  "-vs-binding": {
    "BeforeBuild": [
      "ionic:build"
    ],
    "ProjectOpened": [
      "watch"
    ]
  },
  "cordova": {
    "plugins": {
      "cordova-plugin-console": {},
      "cordova-plugin-device": {},
      "cordova-plugin-splashscreen": {},
      "cordova-plugin-statusbar": {},
      "cordova-plugin-whitelist": {},
      "ionic-plugin-keyboard": {},
      "cordova-plugin-geolocation": {}
    },
    "platforms": [
      "android"
    ]
  }
}

person Ciaran Gallagher    schedule 30.08.2017    source источник
comment
что такое сообщение об ошибке синтаксиса?   -  person Suraj Rao    schedule 30.08.2017
comment
Я обновил исходный комментарий. Спасибо.   -  person Ciaran Gallagher    schedule 30.08.2017
comment
похоже на stackoverflow.com/questions/43759991/   -  person Suraj Rao    schedule 30.08.2017
comment
Аналогично, да, но, к сожалению, это не очень помогает, так как другой вопрос - это кто-то, кто обновляется до Ionic 3.0 - я хочу пока остаться с Ionic 2.0, чтобы избежать проблем с обновлением моего существующего приложения. Другой вопрос, похоже, не относится к тому же фрагменту кода, который у меня тоже не работает (класс AppModule).   -  person Ciaran Gallagher    schedule 30.08.2017
comment
В этом случае ваша оболочка геолокации должна быть 3.x + .. Возможно, вам придется использовать более старую версию ionic-native 2.x, где вам вообще не нужно было вводить в качестве провайдера. Можете ли вы показать свой package.json?   -  person Suraj Rao    schedule 30.08.2017
comment
В package.json для пакета геолокации указана версия ^2.4.3.   -  person Ciaran Gallagher    schedule 30.08.2017


Ответы (1)


Если вы планируете использовать ionic-native 2.x, вам не нужно устанавливать пакет ionic-native/<pluginName>.

В версии 2.x все встроенные оболочки плагинов включены в единый пакет ядра. Кроме того, все типы подключаемых модулей являются глобальными и статическими.

В вашем случае использование

import { Geolocation } from ionic-native // import

//To access the functions,

Geolocation.functionName()

Вы можете удалить пакет ionic-native/Geolocation.
Вам также не нужно устанавливать провайдера в AppModule или внедрять его в конструктор.

person Suraj Rao    schedule 30.08.2017