2016-11-16 17 views
14

私は1つのファイルに数十のjavascript関数を持っています。私がしたいのは、そのファイルをAngular 2コンポーネントにインポートし、 "external.js"ファイルで定義されているinit()関数を実行することです。角度2のコンポーネントから純粋なjavascript関数を呼び出します。

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

import "../../../../assets/external.js"; 

@Component({ 
    selector: 'app-component', 
    templateUrl: 'app.component.html' 
}) 
export class ComponentNameComponent implements AfterViewInit { 
    constructor() { } 

    ngAfterViewInit(): void { 
     // invoke init() function from external.js file 
    } 
} 

external.jsは、インポートおよびngAfterViewInitに()私はINITを呼び出したいという外部ファイル内の他のすべてのメソッドを呼び出すexternal.jsである()関数を使用してロードされます。ここで

はexternal.jsの一部です:

function init() { 
    callFunction1(); 
    callFunction2(); 
} 

答えて

23

あなたがインポートし、外部のオブジェクトを宣言することができます。その後、コンポーネントで使用できます。

import 'external.js' 
declare var myExtObject: any; 

私はplunkerで例を作った: https://plnkr.co/edit/b2kAztHntMuNjTfOv8jD?p=preview

は、この情報がお役に立てば幸いです。

+2

私はあなたの例に従った。私が作成 'VAR webGlObject =(関数(){ リターン{ INIT:関数(){ のinit(); } } })(webGlObject || {}) ' とngAfterViewInitで() でアクセスしようとしましたが、エラーが発生しました 'errors.service.ts:29 ReferenceError:webGlObject is not defined' –

+0

webGlObjectでplunkerを更新しました。私が変更したのは、init関数でinit()を呼び出すことだけです。 – hakany

+0

まだエラーが発生した場合、より多くの情報を提供したり、たとえばplunker、jsfiddleなどで作成できますか? – hakany

関連する問題