неопределенная ошибка при вызове функции javascript в angular 2

Может ли кто-нибудь помочь мне, как вызвать функцию из внешнего файла js внутри моего компонента angular2. Ниже приведен фрагмент моего кода, когда я пытаюсь загрузить приложение, которое выдает ошибку App is undefined.

Вот мой код компонента:

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

@Component({
    selector: 'test',
    templateUrl: './test.html'
})

export class TestComponent implements OnInit {

    constructor() { }

    ngOnInit() {

    }

    ngAfterViewInit() {
        App.handleInit();
    }
}

вот мой скрипт внутри app.js:

var App = function() {
    var handleInit = function() {
        console.log("Hello world");
    };
}();

Когда мы вызываем функцию внутри ngAfterViewInit, она выдает ошибку App is undefined.

Мы импортируем файл app.js внутрь vendor.ts и используем webpack. Здесь app.js загружается нормально, но функция не работает.

Пожалуйста, помогите нам с решением.

Заранее спасибо.


person Surya    schedule 13.06.2017    source источник
comment
нет angularjs 2, есть просто angular   -  person Jota.Toledo    schedule 13.06.2017
comment
Мы имеем в виду, что это Angular2   -  person Surya    schedule 13.06.2017
comment
создайте интерфейс для вашего файла js и загрузите его в свой модуль приложения и получите доступ к этому методу внутри вашего компонента angular 2   -  person balajivaishnav    schedule 13.06.2017
comment
Не могли бы вы привести пример для этого.   -  person Surya    schedule 13.06.2017


Ответы (2)


Вам нужно просто определить переменную приложения в своем компоненте, как показано ниже.

declare var App: any;
@Component({
   .....
})

И теперь ваш приведенный ниже вызов будет работать.

ngAfterViewInit() {
    App.handleInit();
}
person Sandip - Frontend Developer    schedule 13.06.2017
comment
Привет, Сандип. Спасибо за ваш ответ. Мы попробовали все вышеперечисленное, но по-прежнему получаем ошибку App is undefined. - person Surya; 13.06.2017
comment
Ваш JS доступен в DOM? потому что я пробовал этот тип кода в нескольких компонентах, и он работает для меня - person Sandip - Frontend Developer; 13.06.2017
comment
Да, файл загружается, но функция не вызывается. Мы загружаем файлы js в vendor.ts, но не в файл index.html. - person Surya; 13.06.2017
comment
Кажется, когда вы вызываете JS-файл своей функции, а функция недоступна, вам нужно импортировать ИЛИ связать этот JS с глобальным ИЛИ в требуемом компоненте. - person Sandip - Frontend Developer; 13.06.2017
comment
Есть ли способ определить переменные java-скрипта глобально? - person Surya; 13.06.2017
comment
Глобально означает определение на вашей основной целевой странице, если ваша страница обновляется и изменяется целевая страница, вы должны определить в своем текущем компоненте. - person Sandip - Frontend Developer; 13.06.2017
comment
Когда мы попытались загрузить файл app.js внутри index.html, все работало нормально. Но Мы не хотим загружать его. - person Surya; 13.06.2017
comment
Вы также можете загрузить этот javascript в свой компонент, а также посмотреть здесь: stackoverflow.com/a/44276683/6606630 - person Sandip - Frontend Developer; 13.06.2017
comment
Лучше ли загружать внешние файлы js внутри index.html в приложении angular2 с помощью веб-пакета? - person Surya; 13.06.2017

Вы можете получить доступ так. это помогает

import { Component, OnInit, AfterContentInit } from '@angular/core';
import '../../../../js/app.js'; //just example set this based on your path
declare var App: any;

@Component({
    selector: 'test',
    templateUrl: './test.html'
})
export class TestComponent implements OnInit {

    constructor() { }

    ngOnInit() { }

    ngAfterViewInit() {
        this.handleInit();
    }

    hadeleInit() {
        new app.handleInit();
    }
}
person Shailesh Ladumor    schedule 13.06.2017
comment
Привет, Шайлеш Ладумор, спасибо за быстрый ответ, но проблема в том, что в нашем файле app.js (например, в приложении) нет элемента экспорта, поэтому мы не можем импортировать, как вы предложили. Есть ли другой подход? - person Surya; 13.06.2017
comment
куда вы добавляете этот файл js? - person Shailesh Ladumor; 13.06.2017
comment
я обновил свой ответ. вам нужно импортировать файл app.js - person Shailesh Ladumor; 13.06.2017
comment
Тем не менее мы получаем ошибку «Приложение не определено», как показано ниже. Uncaught (в обещании): ошибка: ошибка в: 0: 0, вызванная: приложение не определено - person Surya; 13.06.2017
comment
возможный дубликат stackoverflow.com/questions/41120754/ - person Shailesh Ladumor; 13.06.2017
comment
Когда мы попытались загрузить файл app.js внутри index.html, все работало нормально. Но Мы не хотим загружать его. - person Surya; 13.06.2017
comment
Он работает нормально, только когда я загружаю файлы js внутри индекса, только почему? - person Surya; 13.06.2017