2017-04-11 56 views
2

我打算在ionic2中调用JavaScript中的打字稿方法。让我们考虑由“离子g页MyPage”生成的离子2页,其中我创建了一个方法myNewMethod“。从ionic2中访问JavaScript的打字稿方法

有什么方法可以从javascript函数调用myNewMethod”,它是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; 
}()); 


}), 

看来,我的页面范围并不能直接使用,它的正通过webpack_requare

任何帮助,将不胜感激返回。

感谢

回答

3

也许这不是因为我做我的编目公众的最好办法,但至少它的工作原理。我所做的是我分配ionViewDidLoad在我的页面到窗口变量,即我写道:

eval('window.MyPage = this'); 

的MyMethod被认为是一个原型,并作为一个后果,我可以从JavaScript代码通过调用它:

window.MyPage.MyMethod(); 
0

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

MyCordovaPlugin.prototype.aMethodToOveride=function(){} 

然后形成我的页面在构造

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