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
:
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:
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ť:
je to dobrý postup:
private window: any = window;
existuje iný typ presnejší ako
any
ktoré môžem použiť na riadku vyššie?
odpovede:
1 pre odpoveď č. 1Vzhľ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();