cordova - Åtkomst till TypeScript-metoder från JavaScript i Ionic2
Jag försöker anropa en TypeScript-metod från JavaScript i Ionic2. Låt oss ta en Ionic2-sida som genererats med "ionic g page MyPage" där jag har skapat en metod myNewMethod.
Finns det något sätt att kalla myNewMethod från en javascript-funktion som är en del av ett Cordova-plugin? Jag har märkt att i main.js, som transpilerats till javascript, finns det en variabel MyPage och myNewMethod är definierad som prototype. Men om jag kallar MyPage.myNewMethod verkar det inte fungera.
Jag har vidare lagt märke till följande del av koden:
/* 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;
}());
}),
Det verkar som att omfattningen av MyPage inte är tillgänglig direkt och den returneras via webpack_require
All hjälp skulle uppskattas.
Tack
Svar #1
Det är antagligen inte det bästa sättet eftersom jag gör MyPage offentlig, men åtminstone fungerar det. Vad jag gjorde var att jag tilldelade MyPage till en window-variabel, det vill säga under ionViewDidLoad skrev jag:
eval('window.MyPage = this');
MyMethod anses vara en prototyp och som en följd kan jag kalla på den från JavaScript-kod genom:
window.MyPage.MyMethod();
Svar #2
Ett annat sätt som är mer korrekt är att åsidosätta funktionen som finns i Cordova-pluginet. Om vi betraktar
MyCordovaPlugin.prototype.aMethodToOveride=function(){}
Skapa sedan MyPage i konstruktorn
var MyPage = this;
cordova.plugins.MyCordovaPlugin.aMethodToOveride=function(){
MyPage.MyMethod();
}
