170 votes

Comment inclure un fichier js externe dans Angular 4 et appeler une fonction d'Angular vers js ?

Disons que j'ai un fichier nommé abc.js qui a une fonction xyz() . Je veux appeler cette fonction dans mon projet Angular 4. Comment dois-je m'y prendre ?

137voto

Aravind Points 21523

Référez-vous aux scripts à l'intérieur du angular-cli.json fichier.

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

puis ajouter typings.d.ts

declare var variableName:any;

Importez-le dans votre fichier en tant que

import * as variable from 'variableName';

10 votes

J'ai ajouté le chemin dans scripts comme "scripts" : [ "./assets/common_header_sidebar.js" ] ; puis dans typing.d.ts j'ai écrit declare var commonHeader:any ; et ensuite dans mon fichier ts j'ai écrit import * as commonHeaderModule from 'commonHeader' ; mais j'obtiens l'erreur "Cannot find module 'commonHeader'.

0 votes

commonHeader doit être le nom de l'objet exporté dans le fichier javascript

0 votes

Oui, commonHeader est le nom de la fonction que je dois exporter du fichier js.

48voto

Rahul Singh Points 9890

Afin d'inclure une bibliothèque globale, par exemple le fichier jquery.js dans le tableau des scripts de angular-cli.json :

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

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

5 votes

Comment importer sur le fichier typecript ?

2 votes

Pour importer dans un fichier ts, utilisez - declare var $: any;

3 votes

Le fichier angular-cli.json a été renommé/remplacé par angular.json dans la version 6+ d'Angular.

46voto

Ajouter le fichier js externe dans index.html .

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

Voici monjs.js fichier :

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

4 votes

Exemple très complet merci, il a fonctionné pour moi sur angular 6. Aucune des autres réponses n'a fonctionné.

2 votes

Fwiw, voici quelques explications sur ce que declare hace -- essentiellement " declare est utilisé pour dire à TypeScript que la variable a été créée ailleurs "(extrait de cette réponse ).

1 votes

Je pense que le fichier index.html est vide par conception et je pense que vous devriez le garder ainsi. Le service ng devrait s'occuper de tous les fichiers javascript.

19voto

crash Points 1123

Vous pouvez soit

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

ou

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

33 votes

Que dois-je faire lorsque le fichier est hébergé quelque part mais pas dans le dépôt local ?

0 votes

Vous avez compris ?

1 votes

J'obtiens des erreurs dans les deux méthodes. 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 seconde méthode. Et je n'utilise que Slick Slider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X