我很想在ionic2中调用javascript中的打字稿方法。让我们考虑一个由"ionic g page MyPage"生成的ionic2页面,其中我创建了一个方法myNewMethod"。
有没有办法从作为 cordova 插件一部分的 javascript 函数调用 myNewMethod"?我注意到在main.js中,正如javascripte所翻译的那样,有一个变量MyPage,myNewMethod被定义为原型。但是,如果我调用MyPage.myNewMethod似乎不起作用。
我进一步注意到以下部分代码:
/* 312 */
(function(module, __webpack_exports__, __webpack_require__) {
"use strict";
var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);
var __WEBPACK_IMPORTED_MODULE_1_ionic_angular__ = __webpack_require__(136);
__webpack_require__.d(__webpack_exports__, "a", function() { return MyPage; });
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var MyPage = (function () {
function MyPage(navCtrl, navParams) {
this.navCtrl = navCtrl;
this.navParams = navParams;
}
MyPage.prototype.ionViewDidLoad = function () {
console.log('ionViewDidLoad MyPage');
};
MyPage.prototype.myNewMethod = function () {
//do stuff
};
MyPage = __decorate([
__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["B"])({
selector: 'page-add-item',template:'Some Template'
}),
__metadata('design:paramtypes', [__WEBPACK_IMPORTED_MODULE_1_ionic_angular__["d"], __WEBPACK_IMPORTED_MODULE_1_ionic_angular__["e"]])
], MyPage);
return MyPage;
}());
}),
似乎MyPage的范围无法直接使用,并且正在通过webpack_requare返回
任何帮助将不胜感激。
谢谢
可能这不是最好的方法,因为我公开了MyPage,但至少它有效。我所做的是将MyPage分配给窗口变量,即在ionViewDidLoad期间,我写道:
eval('window.MyPage = this');
MyMethod被认为是一个原型,因此我可以通过以下方式从javascript代码中调用它:
window.MyPage.MyMethod();
另一种更正确的方法是覆盖 cordova 插件中存在的函数。如果我们考虑
MyCordovaPlugin.prototype.aMethodToOveride=function(){}
然后在构造函数中形成 MyPage
var MyPage = this;
cordova.plugins.MyCordovaPlugin.aMethodToOveride=function(){
MyPage.MyMethod();
}