J'ai une fonction que je souhaite appeler après le chargement du contenu de la page. J'ai lu sur $ viewContentLoaded et cela ne fonctionne pas pour moi. Je cherche quelque chose comme
document.addEventListener('DOMContentLoaded', function () {
//Content goes here
}, false);
L'appel ci-dessus ne fonctionne pas pour moi dans le contrôleur AngularJs.
Réponses:
Selon la documentation de $ viewContentLoaded , il est censé fonctionner
$viewContentLoaded
l'événement est émis, ce qui signifie que pour recevoir cet événement, vous avez besoin d'un contrôleur parent commeDe
MainCtrl
vous pouvez écouter l'événementConsultez la démo
la source
ng-repeat
plusieurs directives imbriquées qui généreront du HTML / Contenu basé sur des boucles et des conditions complexes. Le rendu se poursuit pendant un certain temps, même après le$viewContentLoaded
déclenchement de l'événement. Comment pouvez-vous vous assurer que tous les éléments ont été entièrement rendus, puis exécuter certains codes? Tous les commentaires?Angulaire <1.6.X
Angulaire> = 1,6.X
la source
fixe - 2015.06.09
Utilisez une directive et la
ready
méthode d' élément angulaire comme ceci:js
html
ou pour ceux qui utilisent la syntaxe controller-as ...
L'avantage de ceci est que vous pouvez être aussi large ou granulaire avec votre interface utilisateur que vous le souhaitez et que vous supprimez la logique DOM de vos contrôleurs. Je dirais que c'est la méthode angulaire recommandée .
Vous devrez peut-être donner la priorité à cette directive au cas où vous auriez d'autres directives fonctionnant sur le même nœud.
la source
elem.ready( $scope.$apply( readyFunc( $scope )));
Des idées pourquoi cela pourrait être? Peut-être qu'une mise à jour d'angular s'est produite? Quoi qu'il en soit - c'est une approche élégante, si cela peut fonctionner.attrs.onReady
, devrait être ce qu'il est maintenant. L'autre problème était que je l'appelais funky ... ... ce que j'obtiens pour la conversion de coffeescript de mémoire en JS.$timeout
; Vous créez explicitement un addt. Nœud DOM simplement pour exécuter une logique non-dom; Elle n'est réutilisable que si cette méthode se trouve loin dans la hiérarchie $ scope de telle sorte que les étendues enfants en héritent, je pense juste que ça a l'air mauvais dans une perspective NG;$timeout(function() {})
autour duelem.ready()
. Sinon, c'était une$digest already in progress
erreur. Mais de toute façon, merci beaucoup! Je me débat avec cela depuis une heure.Vous pouvez l'appeler directement en ajoutant
{{YourFunction()}}
après l'élément HTML.Voici un
Plunker Link
.la source
J'ai dû implémenter cette logique lors de la manipulation des graphiques Google. ce que j'ai fait, c'est qu'à la fin de ma définition de contrôleur html inside, j'ai ajouté.
et dans cette fonction, appelez simplement votre logique.
la source
La méthode ci-dessus a fonctionné pour moi
la source
vous pouvez appeler la version javascript de l'événement onload dans angular js. cet événement ng-load peut être appliqué à n'importe quel élément dom comme div, span, body, iframe, img etc. Voici le lien pour ajouter ng-load dans votre projet existant.
télécharger ng-load pour angular js
Voici un exemple pour iframe, une fois qu'il est chargé testCallbackFunction sera appelé dans le contrôleur
EXEMPLE
JS
HTML
la source
Si vous obtenez une erreur $ digest déjà en cours, cela peut aider:
la source
L'exécution après le chargement de la page doit être partiellement satisfaite en définissant un écouteur d'événement sur l'événement de chargement de fenêtre
À l'intérieur
module.run(function()...)
de angular, vous aurez tous accès à la structure du module et aux dépendances.Vous pouvez
broadcast
et desemit
événements pour les ponts de communication.Par exemple:
la source
J'utilisais
{{myFunction()}}
dans le modèle, mais j'ai ensuite trouvé un autre moyen d' utiliser ici$timeout
le contrôleur. Je pensais que je le partagerais, cela fonctionne très bien pour moi.la source
Si vous voulez que certains éléments soient complètement chargés, utilisez ng-init sur cet élément.
par exemple
<div class="modal fade" id="modalFacultyInfo" role="dialog" ng-init="initModalFacultyInfo()"> ..</div>
la fonction initModalFacultyInfo () doit exister dans le contrôleur.
la source
J'ai trouvé que si vous avez des vues imbriquées - $ viewContentLoaded est déclenché pour chacune des vues imbriquées. J'ai créé cette solution de contournement pour trouver le $ viewContentLoaded final. Semble bien fonctionner pour définir $ window.prerenderReady comme requis par Prerender (va dans .run () dans l'application principale.js):
la source
la source
La solution qui fonctionne pour moi est la suivante
Le code du contrôleur est le suivant
Le code HTML est le suivant
la source
J'attends
setInterval
le contenu chargé. J'espère que cela peut vous aider à résoudre ce problème.la source
setInterval
comme solution en 2016 ?