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?

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';

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.


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 ...


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()

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.