/ / Cordovaプラグインを呼び出すためにドット表記を使うにはどうすればいいですか? - 角度、コルドバ、タイプスクリプト、イオン2、イオン3

ドット表記を使ってCordovaプラグインを呼び出す方法は? - 角、コードバ、タイプコピー、イオン2、イオン3

私が使用しているプロジェクトがあります 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

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

私は使いたい:

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

しかし私は知りたいのですが:

  1. それは良い習慣です: private window: any = window;

  2. より具体的な他の型はありますか 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();