Come posso includere un file script JavaScript in Angular e chiamare una funzione da quello script?


119

Ho un file JavaScript chiamato abc.jsche ha una funzione "pubblica" chiamata xyz(). Voglio chiamare quella funzione nel mio progetto Angular. Come lo faccio?

Risposte:


105

Fare riferimento agli script all'interno del file angular-cli.json( angular.jsonquando si utilizza angular 6+).

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

quindi aggiungi typings.d.ts(crea questo file srcse non esiste già)

declare var variableName:any;

Importalo nel tuo file come

import * as variable from 'variableName';

9
ho aggiunto il percorso negli script come "scripts": ["./assets/common_header_sidebar.js"]; poi in typing.d.ts ho scritto declare var commonHeader: any; e poi nel mio file ts ho scritto import * as commonHeaderModule da 'commonHeader'; ma ottenendo "Impossibile trovare il modulo 'commonHeader'." errore
Piyush Jain

6
potrei sembrare sciocco per averlo chiesto. ma come sono correlati il ​​nome del file nel percorso (dichiarato in angular-cli.json) e la dichiarazione del nome dell'oggetto nel file typing.d.ts. poiché sto importando dal nome dell'oggetto dichiarato, non dal file
Piyush Jain,

2
puoi creare un plunkerda riprodurre
Aravind

2
fatto con l'integrazione è solo che ho dovuto dichiarare la funzione nel mio file ts dove lo stavo usando e l'importazione non era richiesta. Grazie mille.
Piyush Jain

2
@Aravind cosa succede se non ho il file typing.d.ts nel mio progetto Angular 4?
Habib

33

Per includere una libreria globale, ad esempio un jquery.jsfile nell'array degli script da angular-cli.json( angular.jsonquando si utilizza angular 6+):

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

Dopodiché, riavvia ng serve se è già avviato.


3
come si importa sul file dattiloscritto?
alansiqueira27

1
per importare nel file ts usa -declare var $: any;
ojus kulkarni

3
Il file angular-cli.json è stato rinominato / sostituito con angular.json nella versione 6+ di Angular.
Ε Г И І И О

22

Aggiungi il file js esterno in index.html .

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

Ecco il file 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||{})

Quindi dichiara che è in un componente come di seguito

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>

Sta funzionando per me ...


Grazie di esempio molto completo, ha funzionato per me su angolare 6. Nessuna delle altre risposte ha funzionato.
Daniel Filipe

Fwiw, ecco alcune spiegazioni di cosa declarefa - essenzialmente " declareè usato per dire a TypeScript che la variabile è stata creata altrove " (da questa risposta ).
ruffin

18

Puoi anche tu

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

o

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

26
cosa dovrei fare quando il file è ospitato da qualche parte ma non nel repository locale?
Piyush Jain

L'hai capito?
Luis Aceituno

Ottenere errori in entrambi i metodi. Bene, ho un file .js nel mio progetto, ma quando importi con il primo metodo mi dà un errore nella compilazione e non riesco a trovare alcun modulo quando uso il secondo metodo. E sto solo usando il cursore scorrevole.
Habib
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.