【问题标题】:Access typescript methods from javascript in ionic2从 ionic2 中的 javascript 访问 typescript 方法
【发布时间】:2017-09-06 21:17:14
【问题描述】:

我很想从 ionic2 中的 javascript 调用 typescript 方法。让我们考虑一个由“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

返回的

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: javascript cordova typescript ionic2


    【解决方案1】:

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

    eval('window.MyPage = this');
    

    MyMethod 被认为是一个原型,因此我可以通过以下方式从 javascript 代码中调用它:

    window.MyPage.MyMethod();
    

    【讨论】:

      【解决方案2】:

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

      MyCordovaPlugin.prototype.aMethodToOveride=function(){}
      

      然后在构造函数中形成MyPage

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

      【讨论】:

        猜你喜欢
        • 2017-01-24
        • 2015-12-18
        • 2016-02-25
        • 1970-01-01
        • 2021-07-08
        • 2017-08-15
        • 1970-01-01
        • 2017-01-26
        相关资源
        最近更新 更多