Wie füge ich eine JavaScript-Skriptdatei in Angular ein und rufe eine Funktion aus diesem Skript auf?

118

Ich habe eine JavaScript-Datei namens abc.js, die eine 'öffentliche' Funktion namens hat xyz(). Ich möchte diese Funktion in meinem Angular-Projekt aufrufen. Wie mache ich das?

Piyush Jain
quelle

Antworten:

104

Lesen Sie die Skripte in der Datei angular-cli.json( angular.jsonbei Verwendung von Angular 6+).

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

Fügen Sie dann hinzu typings.d.ts(erstellen Sie diese Datei, srcfalls sie noch nicht vorhanden ist).

declare var variableName:any;

Importieren Sie es in Ihre Datei als

import * as variable from 'variableName';
Aravind
quelle
9
Ich habe einen Pfad in Skripten als "Skripte" hinzugefügt: ["./assets/common_header_sidebar.js"]; dann schrieb ich in typing.d.ts deklariere var commonHeader: any; und dann schrieb ich in meine ts-Datei import * als commonHeaderModule von 'commonHeader'; aber bekommen "Kann das Modul 'commonHeader' nicht finden." Fehler
Piyush Jain
6
Ich könnte albern klingen, wenn ich das frage. aber wie der Dateiname im Pfad (deklariert in angle-cli.json) und das Deklarieren des Namens des Objekts in der Datei typing.d.ts zusammenhängen. da ich aus dem Namen des deklarierten Objekts nicht die Datei importiere
Piyush Jain
2
können Sie eine erstellen, um plunkerzu reproduzieren
Aravind
2
Nach der Integration musste ich nur die Funktion in meiner ts-Datei deklarieren, in der ich sie verwendet habe, und der Import war nicht erforderlich. Danke vielmals .
Piyush Jain
2
@Aravind was ist, wenn ich in meinem Angular 4-Projekt keine typing.d.ts-Datei habe?
Habib
33

Um eine globale Bibliothek einzuschließen, z. B. eine jquery.jsDatei in das Skriptarray von angular-cli.json( angular.jsonbei Verwendung von Angular 6+):

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

Starten Sie danach den Dienst neu, wenn er bereits gestartet ist.

Rahul Singh
quelle
3
Wie importiere ich die Typoskriptdatei?
Alansiqueira27
1
zum importieren in ts datei verwenden -declare var $: any;
ojus kulkarni
3
Die Datei angle-cli.json wurde in Version 6+ von Angular umbenannt / durch angular.json ersetzt.
О Г И І І
22

Fügen Sie eine externe JS-Datei in die Datei index.html ein .

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

Hier ist die Datei 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||{})

Erklären Sie dann, dass es sich um eine Komponente wie unten handelt

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>

Es funktioniert für mich ...

Nagnath Mungade
quelle
Sehr gründliches Beispiel, danke, es hat bei Winkel 6 für mich funktioniert. Keine der anderen Antworten hat funktioniert.
Daniel Filipe
Fwiw, hier sind einige Erklärungen, was declarefunktioniert - im Wesentlichen " declarewird verwendet, um TypeScript mitzuteilen, dass die Variable an anderer Stelle erstellt wurde " (aus dieser Antwort ).
Ruffin
18

Du kannst entweder

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

oder

import { xyz } from './abc';
xyz()
Absturz
quelle
26
Was soll ich tun, wenn die Datei irgendwo gehostet wird, aber nicht im lokalen Repo?
Piyush Jain
Hast du das herausgefunden?
Luis Aceituno
Fehler in beiden Methoden erhalten. Nun, ich habe eine .js-Datei in meinem Projekt, aber wenn ich mit der ersten Methode importiere, gibt es Fehler beim Kompilieren und ich kann kein Modul finden, wenn ich die zweite Methode verwende. Und ich benutze nur Slick Slider.
Habib