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
:
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:
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:
est-ce une bonne pratique à faire:
private window: any = window;
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 № 1Comme 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();