2016-10-26 2 views
0

У меня есть JavaScript-метод во внешнем JS-файле. В проекте Ionic 2 я должен вызвать некоторые функции функции AnyJS из моего home.ts. Я включил JS-файл в тег <script> в index.html. Я объявил AnyJS вот так declare var AnyJS: any; выше @Component в моем home.ts.Как вызвать внешнюю функцию JavaScript в Ionic 2

Теперь, при создании объекта с помощью ключевого слова new в конструкторе я получаю следующее сообщение об ошибке: ссылочного

5 713568 error EXCEPTION: Error in ./HomePage class HomePage_Host - inline template:0:0 caused by: AnyJS is not defined 6 713570 error ORIGINAL EXCEPTION: AnyJS is not defined 8 713575 error ReferenceError: AnyJS is not defined

версия Ионного Я использую:

Cordova CLI: 6.3.1 
Ionic Framework Version: 2.0.0-rc.1 
Ionic CLI Version: 2.1.0 
Ionic App Lib Version: 2.1.0-beta.1 
ios-deploy version: 1.8.3 
ios-sim version: 5.0.4 
OS: Mac OS X El Capitan 
Node Version: v6.8.0 
Xcode version: Xcode 8.0 Build version 8A218a 

Здесь является home.ts:

import { Component } from '@angular/core'; 

import { NavController } from 'ionic-angular'; 

declare var AnyJS: any; 

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html' 
}) 

export class HomePage { 

    private anyjs : any; 
    private method : any; 

    constructor(public navCtrl: NavController) { 
     this.anyjs = new AnyJS(); 
     this.method = this.anyjs.methodCall(); 
    } 

} 

И вот мой файл AnyJS :

function AnyJS(){} 

AnyJS.prototype.methodCall = function() { 
    console.log("Done!"); 
    return true; 
}; 

Примечание: AnyJS файл содержит объект с некоторыми свойствами и методами, которые не соответствуют последним стандартам ES6, но простые методы JS. Мне нужно создать объект и вызвать методы непосредственно из моего home.ts.

ответ

2

Изменить вашу AnyJs файл на что-то вроде этого:

export class AnyJs { 

    public methodCall() { 
    console.log('done'); 
    return true; 
    } 

} 

Затем в импорте home.ts файла он:

import { Component } from '@angular/core'; 

import { NavController } from 'ionic-angular'; 

import { AnyJs } from './anyjs.ts'; // or the path of the file 

@Component({ 
    selector: 'page-home', 
    templateUrl: 'home.html' 
}) 

export class HomePage { 

    constructor(
     public navCtrl: NavController, 
     public anyJs: AnyJs) { 
     this.anyJs = anyJs; 
     // And then you can use it anywhere in your file like: 
     this.anyJs.methodCall().success(data => console.log(data)); 
    } 

} 

Теперь, если ваш файл AnyJs это ES6 файл у вас есть такие варианты:

Объявить модуль и экспортировать класс в эксплуатацию:

declare module "foo" { export class Foo{ } } 

Или Объявить функцию как модуль

export default function() { ... }; 


import myFunc from 'AnyJs'; 
myFunc(); 
+0

Спасибо за вашу помощь. Но нужно ли переписывать функции во внешних js в TypeScript? Есть ли другое решение для импорта моего js-файла, поскольку оно не переписывается в TypeScript? –

+0

Вы можете объявить модуль с помощью es6: 'declare module" foo "{ экспортный класс Foo {} }' например. –

+0

Не могли бы вы объяснить это? Потому что я хочу импортировать свой js-файл, поскольку он не переписывается в TypeScript. –

Смежные вопросы