Jak dołączyć plik skryptu JavaScript do Angular i wywołać funkcję z tego skryptu?


119

Mam plik JavaScript o nazwie, abc.jsktóry ma funkcję „public” o nazwie xyz(). Chcę wywołać tę funkcję w moim projekcie Angular. W jaki sposób mogę to zrobić?

Odpowiedzi:


105

Skorzystaj ze skryptów znajdujących się w pliku angular-cli.json(w angular.jsonprzypadku korzystania z angular 6+).

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

następnie dodaj typings.d.ts(utwórz ten plik, srcjeśli jeszcze nie istnieje)

declare var variableName:any;

Zaimportuj go do swojego pliku jako

import * as variable from 'variableName';

9
dodałem ścieżkę w skryptach jako "skrypty": ["./assets/common_header_sidebar.js"]; następnie w typing.d.ts napisałem deklaruj var commonHeader: any; a potem w moim pliku ts napisałem import * jako commonHeaderModule z 'commonHeader'; ale otrzymuję komunikat „Nie można znaleźć modułu" commonHeader "." błąd
Piyush Jain

6
mogę zabrzmieć głupio, pytając o to ale w jaki sposób nazwa pliku w ścieżce (zadeklarowana w angular-cli.json) i zadeklarowanie nazwy obiektu w pliku typing.d.ts jest powiązane. ponieważ importuję z nazwy zadeklarowanego obiektu, a nie pliku
Piyush Jain

2
czy możesz stworzyć plunkerdo odtworzenia
Aravind

2
zrobiłem z integracją, po prostu musiałem zadeklarować funkcję w moim pliku ts, w którym jej używałem i import nie był wymagany. Dzięki za tonę.
Piyush Jain

2
@Aravind co, jeśli nie mam pliku typing.d.ts w moim projekcie Angular 4?
Habib

33

Aby zawrzeć globalną bibliotekę, np. jquery.jsPlik w tablicy skryptów z angular-cli.json( angular.jsonprzy używaniu angular 6+):

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

Następnie zrestartuj serwis, jeśli jest już uruchomiony.


3
jak importujesz plik maszynopisu?
alansiqueira

1
import w pliku ts użyj -declare var $: any;
ojus kulkarni

3
Nazwa pliku angular-cli.json została zmieniona / zastąpiona przez angular.json w wersji 6+ Angular.
Ε Г И І И О

22

Dodaj zewnętrzny plik js w index.html .

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

Oto plik 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||{})

Następnie zadeklaruj, że jest w komponencie jak poniżej

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>

Działa na mnie ...


Bardzo dokładny przykład dzięki, działał dla mnie na kątowej 6. Żadna z pozostałych odpowiedzi nie działała.
Daniel Filipe

Fwiw, oto kilka wyjaśnień tego, co declarerobi - zasadniczo „ declaresłuży do poinformowania TypeScript, że zmienna została utworzona gdzie indziej ” (na podstawie tej odpowiedzi ).
ruffin

18

Możesz albo

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

lub

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

26
co mam zrobić, gdy plik jest hostowany gdzieś, ale nie w lokalnym repozytorium?
Piyush Jain

zrozumiałeś to?
Luis Aceituno

Otrzymywanie błędów w obu metodach. Cóż, mam plik .js w moim projekcie, ale kiedy importuję pierwszą metodą, pojawia się błąd podczas kompilacji i nie mogę znaleźć żadnego modułu, gdy używam drugiej metody. Używam tylko gładkiego suwaka.
Habib
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.