Как мне включить файл сценария JavaScript в Angular и вызвать функцию из этого сценария?


119

У меня есть файл JavaScript с именем abc.js«общедоступная» функция xyz(). Я хочу вызвать эту функцию в моем проекте Angular. Как я могу это сделать?

Ответы:


105

Обратитесь к сценариям внутри файла angular-cli.json( angular.jsonпри использовании angular 6+).

"scripts": [
    "../path" 
 ];

затем добавьте typings.d.ts(создайте этот файл, srcесли он еще не существует)

declare var variableName:any;

Импортируйте его в свой файл как

import * as variable from 'variableName';

9
я добавил путь в скриптах как «скрипты»: [«./assets/common_header_sidebar.js»]; затем в typing.d.ts я написал: declare var commonHeader: any; а затем в моем ts файле я написал import * как commonHeaderModule из commonHeader; но получаю сообщение «Не удается найти модуль commonHeader». ошибка
Пиюш Джайн

6
я могу показаться глупым, если спрашиваю об этом. но как связаны имя файла в пути (объявленное в angular-cli.json) и объявление имени объекта в файле typing.d.ts. так как я импортирую из имени объявленного объекта, а не из файла
Пиюш Джайн

2
plunker
Аравинд

2
сделано с интеграцией, мне просто пришлось объявить функцию в моем ts-файле, где я ее использовал, и импорт не требовался. Благодаря тонну .
Пиюш Джайн

2
@Aravind что делать, если у меня нет файла typing.d.ts в моем проекте Angular 4?
Хабиб

34

Чтобы включить глобальную библиотеку, например jquery.jsфайл в массив скриптов angular-cli.json( angular.jsonпри использовании angular 6+):

"scripts": [
  "../node_modules/jquery/dist/jquery.js"
]

После этого перезапустите ng serve, если он уже запущен.


3
как вы импортируете файл машинописного текста?
alansiqueira27

1
для импорта в файл ts используйте -declare var $: any;
ojus kulkarni

3
Файл angular-cli.json был переименован / заменен на angular.json в версии 6+ Angular.
Ε Г И І И О

22

Добавьте внешний файл js в index.html .

<script src="./assets/vendors/myjs.js"></script>

Вот файл myjs.js :

var myExtObject = (function() {

    return {
      func1: function() {
        alert('function 1 called');
      },
      func2: function() {
        alert('function 2 called');
      }
    }

})(myExtObject||{})


var webGlObject = (function() { 
    return { 
      init: function() { 
        alert('webGlObject initialized');
      } 
    } 
})(webGlObject||{})

Затем объявите, что он находится в компоненте, как показано ниже

demo.component.ts

declare var myExtObject: any;
declare var webGlObject: any;

constructor(){
    webGlObject.init();
}

callFunction1() {
    myExtObject.func1();
}

callFunction2() {
    myExtObject.func2();
}

demo.component.html

<div>
    <p>click below buttons for function call</p>
    <button (click)="callFunction1()">Call Function 1</button>
    <button (click)="callFunction2()">Call Function 2</button>
</div>

У меня работает ...


Очень подробный пример, спасибо, он сработал для меня на angular 6. Ни один из других ответов не работал.
Даниэль Филипе

Fwiw, вот несколько объяснений того, что declareделает - по сути, « declareиспользуется, чтобы сообщить TypeScript, что переменная была создана в другом месте » (из этого ответа ).
Руффин

18

Вы также можете

import * as abc from './abc';
abc.xyz();

или

import { xyz } from './abc';
xyz()

27
что мне делать, если файл где-то размещен, но не в локальном репо?
Пиюш Джайн

ты понял это?
Луис Асейтуно,

Получение ошибок в обоих методах. Ну, у меня есть файл .js в моем проекте, но когда я импортирую первым методом, он дает мне ошибку при компиляции и не может найти ни одного модуля, когда я использую второй метод. И я просто использую гладкий слайдер.
Habib
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.