我有一个项目,我正在使用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
更具体的其他类型吗?
答案 0 :(得分:1)
由于该错误只是因为抱怨对hello
对象中的window
属性一无所知而抱怨,您可以将window
对象强制转换为any
,如下所示:< / p>
(<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(...)
答案 1 :(得分:0)
通常你在Ionic / Cordova中使用自定义插件,如下所示: 在文件顶部添加以下行:
declare var NameOfTheJsModule
您可以在名称属性下的插件的plugin.xml中找到js-module的名称:
<js-module src="www/inappbrowser.js" name="inappbrowser">
...
</js-module>
所以在这种情况下:
delcare var inappbrowser;
并使用它,例如:
this.inappbrowser.show();