2016-11-16 5 views
14

Ich habe eine Datei, die Dutzende Javascript-Funktionen haben. Ich möchte diese Datei in die Komponente Angular 2 importieren und die Funktion init() ausführen, die in der Datei "external.js" definiert ist.Aufruf von reinem JavaScript-Funktion von Angular 2 Komponente

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 geladen Import mit und in ngAfterViewInit() Ich möchte init() Funktion aufzurufen, die in external.js ist, die alle anderen Methoden in dieser externen Datei aufruft.

Hier ist ein Teil external.js:

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

Antwort

23

Sie können Ihr externes Objekt importieren und erklären. Danach können Sie es in Ihrer Komponente verwenden.

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

ich ein Beispiel in Plunker gemacht: https://plnkr.co/edit/b2kAztHntMuNjTfOv8jD?p=preview

Hoffnung, das hilft.

+2

Ich folgte Ihrem Beispiel. Ich habe 'var webGlObject = (function() { return { init: function() { init(); } } }) (webGlObject || {}) ' und in ngAfterViewInit() versucht, mit 'webGlObject.init() zuzugreifen;' aber ich erhalte Fehler 'errors.service.ts: 29 ReferenceError: webGlObject ist nicht definiert ' –

+0

Ich habe Plunker mit Ihrem webGlObject aktualisiert und es funktioniert. Ich habe nur geändert, dass Sie init() in der Init-Funktion aufrufen. – hakany

+0

Wenn Sie immer noch einen Fehler erhalten, können Sie weitere Informationen bereitstellen oder in zum Beispiel in Plunker, Jfiddle oder etwas anderes erstellen? – hakany

Verwandte Themen