Comment inclure un fichier de script JavaScript dans Angular et appeler une fonction à partir de ce script?

119

J'ai un fichier JavaScript appelé abc.jsqui a une fonction «publique» appelée xyz(). Je souhaite appeler cette fonction dans mon projet Angular. Comment je fais ça?

Piyush Jain
la source

Réponses:

105

Reportez-vous aux scripts dans le fichier angular-cli.json( angular.jsonlors de l'utilisation d'angular 6+).

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

puis ajoutez typings.d.ts(créez ce fichier srcs'il n'existe pas déjà)

declare var variableName:any;

Importez-le dans votre fichier comme

import * as variable from 'variableName';
Aravind
la source
9
j'ai ajouté le chemin dans les scripts en tant que "scripts": ["./assets/common_header_sidebar.js"]; puis en tapant.d.ts j'ai écrit declare var commonHeader: any; puis dans mon fichier ts, j'ai écrit import * comme commonHeaderModule à partir de «commonHeader»; mais obtenant "Impossible de trouver le module 'commonHeader'." error
Piyush Jain
6
Je pourrais sembler idiot de demander cela. mais comment le nom du fichier dans le chemin (déclaré dans angular-cli.json) et le nom de la déclaration de l'objet dans le fichier typing.d.ts sont liés. puisque j'importe du nom de l'objet déclaré pas du fichier
Piyush Jain
2
pouvez-vous créer un plunkerpour reproduire
Aravind
2
fait avec l'intégration, c'est juste que j'ai dû déclarer la fonction dans mon fichier ts où je l'utilisais et l'importation n'était pas nécessaire. Merci beaucoup .
Piyush Jain
2
@Aravind et si je n'ai pas de fichier typing.d.ts dans mon projet Angular 4?
Habib
33

Pour inclure une bibliothèque globale, par exemple un jquery.jsfichier dans le tableau de scripts de angular-cli.json( angular.jsonlors de l'utilisation d'angular 6+):

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

Après cela, redémarrez ng serve s'il est déjà démarré.

Rahul Singh
la source
3
comment importez-vous sur le fichier dactylographié?
alansiqueira27
1
pour importer dans ts file use -declare var $: any;
ojus kulkarni
3
Le fichier angular-cli.json a été renommé / remplacé par angular.json dans la version 6+ d'Angular.
Ε Г И І И О
22

Ajoutez un fichier js externe dans index.html .

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

Voici le fichier 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||{})

Ensuite, déclarez qu'il est dans le composant comme ci-dessous

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>

Ça marche pour moi ...

Nagnath Mungade
la source
Exemple très complet merci, cela a fonctionné pour moi sur angulaire 6. Aucune des autres réponses n'a fonctionné.
Daniel Filipe
Fwiw, voici quelques explications de ce que declarefait - essentiellement " declareest utilisé pour dire à TypeScript que la variable a été créée ailleurs " (à partir de cette réponse ).
ruffin
18

Tu peux soit

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

ou

import { xyz } from './abc';
xyz()
crash
la source
26
que dois-je faire lorsque le fichier est hébergé quelque part mais pas dans le dépôt local?
Piyush Jain
avez-vous compris cela?
Luis Aceituno
Obtenir des erreurs dans les deux méthodes. Eh bien, j'ai un fichier .js dans mon projet, mais lorsque j'importe par la première méthode, cela me donne une erreur de compilation et je ne trouve aucun module lorsque j'utilise la deuxième méthode. Et j'utilise juste un curseur lisse.
Habib