2017-08-24 1 views
0

私が使用しているプロジェクトはIonic2/Cordova Plugins/Androidです。ドット表記を使用してCordovaプラグインを呼び出す方法は?

$ 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プロジェクトです。画面上のボタンをクリックすると、Cordovaプラグインによって返されたメッセージHello, Worldが返されます。

window.hello.greet(...)

代わりの

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

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

は、私が使用したい:

私の問題は、ライン17にということです10

しかし、私が使用している場合:

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

次の画像上で見ることができるように:

enter image description here

利用するために、ドット表記を使用する方法上の任意のアイデアwindow.hello.greet(...)私はエラーを取得しますカスタムCordovaプラグインの?

[EDIT 1]

私は次のようにコードを変更して正常に動作している彼のコメントに@sebaferrerasの提案を1として:

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

そのエラーがちょうど活字体がwindowオブジェクト内のhelloプロパティの何も知らない文句あるので、あなたがこのようなanywindowオブジェクトをキャストすることができます

(<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(...) 
+0

ありがとうございます。しかし、私は2つの小さな質問があります.1つは、プライベートウィンドウ:any = window;を使用するのがよい習慣ですか?2-前の行で使用できる 'any'より具体的な他のタイプはありますか? – davidesp

+0

答えを更新しました。 1.に関して、 'window'はグローバルオブジェクトであるので、それをコンポーネントのプロパティに割り当てるのはあまり意味がありません(その場合は、' hello'プロパティを単一の場所)。約2.、上の答えの更新を確認してください:) – sebaferreras

0

: 行以下を追加し、このようなクラスファイルの先頭に:

declare var NameOfTheJsModule 

あなたはnameプロパティの下にプラグインのplugin.xmlの中でJS-モジュールの名前を見つけることができます。

delcare var inappbrowser; 

と例えばそれを使用する:このケースではそう

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

this.inappbrowser.show(); 
関連する問題