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?

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

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


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


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.