/ / Ako používať bodovú notáciu na zavolanie doplnku Cordova? - uhlovú, cordovú, typografickú, iónovú2, iónovú3

Ako používať bodovú notáciu na zavolanie doplnku Cordova? - uhlovú, cordovú, typografickú, iónovú2, iónovú3

Mám projekt, ktorý používam Ionic2 / Cordova Plugins / Android.

$ mkdir stackoverflow-question
$ cd stackoverflow-question
$ git clone https://github.com/napolev/stackoverflow-question.git .
$ npm install
$ ionic platform add android
$ ionic run android -l

Tento projekt funguje správne. V podstate je to Hello World Projekt. Po kliknutí na tlačidlo na obrazovke dostanete správu Hello, World vrátený znakom a Cordova zapojiť.

Môj problém je, že na trati 17:

https://github.com/napolev/stackoverflow-question/blob/75ecff023a250e14752762582a078d038957c89a/src/pages/home/home.ts#L17

Chcem použiť:

window.hello.greet(...)

namiesto

window["hello"].greet(...)

ale keď používam: window.hello.greet(...) Mám chybu:

Property "hello" does not exist on type "Window".

Ako vidíte na nasledujúcom obrázku:

tu zadajte popis obrázku

Akékoľvek predstavy o tom, ako používať bodové notácie na využitie vlastného Cordova zapojiť?

[EDIT 1]

Ako je to @sebaferreras návrh na jeho komentár Zmenil kód nasledujúcim spôsobom a funguje správne:

import { Component } from "@angular/core";
import { NavController } from "ionic-angular";

@Component( {
selector: "page-home",
templateUrl: "home.html",
})
export class HomePage {

private window: any = window;
private greet: string;

constructor(
public navCtrl: NavController,
) {}

private doGreet() {
this.window.hello.greet("World", (message) => {
this.greet = message;
}, () => {
this.greet = "[ERROR]";
});
}
}

ale chcel by som vedieť:

  1. je to dobrý postup: private window: any = window;

  2. existuje iný typ presnejší ako any ktoré môžem použiť na riadku vyššie?

odpovede:

1 pre odpoveď č. 1

Vzhľadom k tomu, že chyba je len Tyescript si sťažujú, že o ničom nevedia hello majetok v window objekt, môžete odhodiť window namietať proti any ako toto:

(<any>window).hello.greet(...)

editovať

Ak sa chcete vyhnúť obsadeniu any, môžete vytvoriť svoju vlastnú triedu založenú na Window triedy, ako je táto:

export interface IGreetingService {
greet(): void; // Here you can add any function signature
}

export class CustomWindow extends Window {
hello: IGreetingService;
}

Potom ju môžete použiť takto:

(<any>CustomWindow).hello.greet(...)

alebo

private window: CustomWindow = window; // The cast is being done here!
this.window.hello.greet(...)

0 pre odpoveď č. 2

Zvyčajne používate vlastné pluginy v Ionic / Cordova takto: Pridajte nasledujúci riadok v hornej časti súboru:

declare var NameOfTheJsModule

Názov js-modulu nájdete v plugin.xml doplnku pod vlastnosťou názvu:

<js-module src="www/inappbrowser.js" name="inappbrowser">
...
</js-module>

tak v tomto prípade:

delcare var inappbrowser;

a použiť ho napríklad:

this.inappbrowser.show();