从ionic2中的javascript访问打字稿方法

时间:2017-04-11 13:02:25

标签: javascript cordova typescript ionic2

我想从ionic2中的javascript调用typescript方法。让我们考虑由离子g页面MyPage"生成的离子2页面。我在哪里创建了一个方法myNewMethod"。

有没有办法打电话给myNewMethod"来自javascript函数,它是cordova插件的一部分?我注意到在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

返回

任何帮助都将不胜感激。

由于

2 个答案:

答案 0 :(得分:3)

可能这不是我公开MyPage以来最好的方法,但至少它可行。我所做的是我将MyPage分配给窗口变量,即在我写的ionViewDidLoad期间:

eval('window.MyPage = this');

MyMethod被认为是原型,因此我可以通过javascript代码调用它:

window.MyPage.MyMethod();

答案 1 :(得分:0)

另一种更正确的方法是覆盖cordova插件中存在的函数。如果我们考虑

MyCordovaPlugin.prototype.aMethodToOveride=function(){}

然后在构造函数中形成MyPage

var MyPage = this; 
cordova.plugins.MyCordovaPlugin.aMethodToOveride=function(){ 
    MyPage.MyMethod();  
}