Як включити файл сценарію JavaScript у Angular і викликати функцію з цього сценарію?


119

У мене є JavaScript-файл, abc.jsякий має функцію "public" xyz(). Я хочу назвати цю функцію у своєму проекті Angular. Як це зробити?

Відповіді:


105

Перегляньте сценарії всередині файлу angular-cli.json( angular.jsonпри використанні кутового 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 я написав оголосити var commonHeader: будь-який; а потім у свій файл ts я написав імпорт * як commonHeaderModule з 'commonHeader'; але отримання "Неможливо знайти модуль" commonHeader "." помилка
Piyush Jain

6
я можу звучати нерозумно за запитання про це. але як пов’язане ім'я файлу в контурі (оголошеному в angular-cli.json) та оголошенні імені об'єкта у файлі typing.d.ts. оскільки я імпортую з імені заявленого об'єкта не файл
Piyush Jain

2
чи можете ви створити plunkerдля відтворення
Aravind

2
зроблено з інтеграцією, це просто те, що мені довелося оголосити функцію в моєму файлі ts, де я її використовував, а імпорт не був потрібен. Дякую тонну.
Піюш Джайн

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

33

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

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

Після цього перезапустіть службу, якщо вона вже запущена.


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

1
імпортувати в тс використання файлів -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>

Це працює для мене ...


Дуже ретельний приклад дякую, це працювало на мене під кутом 6. Жоден з інших відповідей не працював.
Даніель Філіпе

Fwiw, ось кілька пояснень того, що declareробить - по суті " declareвикористовується для того, щоб повідомити TypeScript, що змінна була створена в іншому місці " (з цієї відповіді ).
ruffin

18

Ви можете будь-який

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

або

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

26
що я повинен робити, коли файл розміщений десь, але не в локальному репо?
Піюш Джайн

ти це зрозумів?
Луїс Асеітуно

Отримання помилок в обох методах. Ну, у мене є .js файл у моєму проекті, але коли я імпортую першим методом, він дає мені помилку при компіляції і не можу знайти жодного модуля, коли я використовую другий метод. І я просто використовую слайдер слайдер.
Хабіб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.