2016-11-16 2 views
14

У меня есть один файл с десятками функций javascript. Я хочу, чтобы импортировать этот файл в компонент Angular 2 и запустить функцию init(), которая определена в файле «external.js».Вызов чистой функции javascript из компонента Angular 2

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

Я следовал за вашим примером. Я создал 'вар webGlObject = (функция() { возврата { INIT: функция() { инициализации();} } }) (webGlObject || {}) ' и в ngAfterViewInit() пытался получить доступ с помощью 'webGlObject.init();' , но я получаю ошибку 'errors.service.ts: 29 ReferenceError: webGlObject не определен' –

+0

У меня есть обновленный плункер с вашим webGlObject, и он работает. Единственное, что я изменил, это то, что вы вызываете init() в функции init. – hakany

+0

если вы все еще получаете сообщение об ошибке, можете ли вы предоставить дополнительную информацию или создать, например, в plunker, jsfiddle или что-то еще? – hakany