/ / Comment utiliser la notation par points pour appeler un plugin Cordova? - angulaire, cordova, dactylographié, ionique2, ionique3

Comment utiliser la notation par points pour appeler un plugin Cordova? - angulaire, cordova, dactylographié, ionique2, ionique3

J'ai un projet où j'utilise 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

Ce projet fonctionne correctement. C'est fondamentalement un Hello World projet. Lorsque vous cliquez sur le bouton à l'écran, vous obtenez le message Hello, World retourné par un Cordova brancher.

Mon problème est que sur la ligne 17:

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

Je veux utiliser:

window.hello.greet(...)

au lieu de

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

mais quand j'utilise: window.hello.greet(...) Je reçois l'erreur:

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

Comme vous pouvez le voir sur l'image suivante:

entrer la description de l'image ici

Toute idée sur la façon d'utiliser la notation par points pour utiliser une personnalisation Cordova brancher?

[EDIT 1]

Selon @sebaferreras suggestion sur son commentaire, j’ai modifié le code de la manière suivante et cela fonctionne correctement:

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]";
});
}
}

mais j'aimerais savoir:

  1. est-ce une bonne pratique à faire: private window: any = window;

  2. y at-il un autre type plus spécifique que any que je peux utiliser sur la ligne ci-dessus?

Réponses:

1 pour la réponse № 1

Comme cette erreur est simplement typographique, il se plaint de ne rien savoir hello propriété dans le window objet, vous pouvez lancer le window objecter à any comme ça:

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

modifier

Si vous voulez éviter le casting à any, vous pouvez créer votre propre classe sur la base du Window classe comme ceci:

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

export class CustomWindow extends Window {
hello: IGreetingService;
}

Ensuite, vous pourriez l'utiliser comme ceci:

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

Ou

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

0 pour la réponse № 2

En général, vous utilisez des plugins personnalisés dans Ionic / Cordova comme ceci: Ajoutez la ligne suivante en haut de votre fichier:

declare var NameOfTheJsModule

Vous pouvez trouver le nom du js-module dans plugin.xml du plugin sous la propriété name:

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

alors dans ce cas:

delcare var inappbrowser;

et de l'utiliser par exemple:

this.inappbrowser.show();