Question simple, j'espère.
Je veux exécuter un script lorsque l'équivalent Angular2 de $ document.ready () est déclenché. Quelle est la meilleure façon d'y parvenir?
J'ai essayé de mettre le script à la fin de index.html
, mais comme je l'ai découvert, cela ne fonctionne pas! Je suppose qu'il doit entrer dans une sorte de déclaration de composant?
Est-il possible d'exécuter le chargement du script à partir d'un .js
fichier?
EDIT - Code:
J'ai les plugins js et css suivants injectés dans mon application (à partir du thème html Foundry ).
<link href="css/themify-icons.css" rel="stylesheet" type="text/css" media="all" />
<link href="css/bootstrap.css" rel="stylesheet" type="text/css" media="all" />
...
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/flexslider.min.js"></script>
...
<script src="js/scripts.js"></script> //This initiates all the plugins
Comme indiqué, le script.js «instancie» le tout, et doit donc être exécuté une fois Angular prêt. script.js
Ça marche:
import {Component, AfterViewInit} from 'angular2/core';
@Component({
selector: 'home',
templateUrl: './components/home/home.html'
})
export class HomeCmp implements AfterViewInit {
ngAfterViewInit() {
//Copy in all the js code from the script.js. Typescript will complain but it works just fine
}
Réponses:
Vous pouvez déclencher un événement vous-même dans
ngOnInit()
votre composant racine Angular, puis écouter cet événement en dehors d'Angular.Ceci est du code Dart (je ne connais pas TypeScript) mais ne devrait pas être trop difficile à traduire
la source
ngAfterViewInit() { ... }
. Pas besoin de déclencher un événement.Copie de la réponse de Chris:
Ça marche:
la source
AfterViewChecked
, mais tout de même, voici un vote positif pour m'orienter dans la bonne direction.ngAfterViewInit()
. Par exemplewindow.MY_APP = {}; MY_APP.init = function () {/*copy all that script.js here*/ }
. Ensuite, dans votre composant,import ...; declare var MY_APP: any; class HomeComponent() { ngAfterViewInit() { MY_APP.init(); } }
mais l' essentiel est toujours que vous n'avez pas d'application angular2 - votre script.js est essentiellement une page jquery à l'ancienne. Vous pouvez en transformer la majeure partie en composants NG2.$document.ready()
.J'ai choisi cette solution pour ne pas avoir à inclure mon code js personnalisé dans le composant autre que la fonction jQuery $ .getScript .
J'ai trouvé que c'est un bon moyen de contourner les fichiers js personnalisés ou du fournisseur qui n'ont pas de typages disponibles de cette façon TypeScript ne vous crie pas lorsque vous démarrez votre application.
Mettre à jour En fait, dans mon scénario, l'événement du cycle de vie OnInit fonctionnait mieux car il empêchait le script de se charger après le chargement des vues, ce qui était le cas avec ngAfterViewInit, et cela faisait que la vue affiche des positions d'élément incorrectes avant le chargement du script.
la source
Cannot find name '$'.
quand j'essaye de suivre cet exemple?npm install @types/jquery -D
? : DPour utiliser jQuery dans Angular, déclarez uniquement le $ comme suit: declare var $: any;
la source
la réponse acceptée n'est pas correcte et cela n'a aucun sens de l'accepter compte tenu de la question
ngAfterViewInit se déclenchera lorsque le DOM sera prêt
whine ngOnInit se déclenchera lorsque le composant de page commence à peine à être créé
la source
Dans votre fichier main.ts , bootstrap après DOMContentLoaded afin que angular se charge lorsque DOM est complètement chargé.
la source