私が使用しているプロジェクトがあります 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
このプロジェクトは正しく機能します。基本的には Hello World
プロジェクト。画面上のボタンをクリックするとメッセージが表示されます Hello, World
によって返されます Cordova
プラグイン。
私の問題はその線にあります 17
:
私は使いたい:
window.hello.greet(...)
の代わりに
window["hello"].greet(...)
しかし私が使用するとき: window.hello.greet(...)
私はエラーが表示されます:
Property "hello" does not exist on type "Window".
次の図に見られるように:
ドット表記を使用してカスタムを使用する方法に関するアイデア Cordova
プラグイン?
[編集1]
毎時 @sebaferreras
彼のコメントに対する提案私は次のようにコードを変更し、それは正しく機能しています。
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]";
});
}
}
しかし私は知りたいのですが:
それは良い習慣です:
private window: any = window;
より具体的な他の型はありますか
any
私は上記の行で使用することができますか?
回答:
回答№1は1そのエラーは単にタイプスクリプトが hello
のプロパティ window
オブジェクトをキャストすることができます window
〜に向ける any
このような:
(<any>window).hello.greet(...)
編集
キャストを避けたい場合 any
に基づいて独自のクラスを作成することができます。 Window
このようなクラス:
export interface IGreetingService {
greet(): void; // Here you can add any function signature
}
export class CustomWindow extends Window {
hello: IGreetingService;
}
それで、あなたはこれを次のように使うことができます:
(<any>CustomWindow).hello.greet(...)
または
private window: CustomWindow = window; // The cast is being done here!
this.window.hello.greet(...)
回答№2の場合は0
通常、Ionic / Cordovaでは次のようにカスタムプラグインを使用します。 ファイルの先頭に次の行を追加します。
declare var NameOfTheJsModule
jsモジュールの名前は、nameプロパティの下のプラグインのplugin.xmlにあります。
<js-module src="www/inappbrowser.js" name="inappbrowser">
...
</js-module>
だからこの場合:
delcare var inappbrowser;
そしてそれを使うために。
this.inappbrowser.show();