Tengo una función a la que quiero llamar después de cargar el contenido de la página. Leí sobre $ viewContentLoaded y no me funciona. Estoy buscando algo como
document.addEventListener('DOMContentLoaded', function () {
//Content goes here
}, false);
La llamada anterior no funciona para mí en el controlador AngularJs.
Respuestas:
De acuerdo con la documentación de $ viewContentLoaded , se supone que funciona
$viewContentLoaded
se emite un evento que significa que para recibir este evento necesita un controlador principal comoDesde
MainCtrl
tu puedes escuchar el eventoMira la demo
fuente
ng-repeat
varias directivas anidadas que generarán HTML / Contenido en función de bucles y condiciones complejas. La representación continúa durante algún tiempo, incluso después de$viewContentLoaded
que se desencadena el evento. ¿Cómo puede asegurarse de que todos los elementos se hayan procesado completamente y luego ejecutar cierto código? ¿Cualquier retroalimentación?Angular <1.6.X
Angular> = 1.6.X
fuente
fijo - 2015.06.09
Usa una directiva y el elemento angular
ready
método del manera:js
html
o para aquellos que usan la sintaxis de controlador como ...
El beneficio de esto es que puede ser tan amplio o granular con su IU como desee y está eliminando la lógica DOM de sus controladores. Yo diría que este es el angular recomendado forma .
Es posible que deba priorizar esta directiva en caso de que tenga otras directivas que operen en el mismo nodo.
fuente
elem.ready( $scope.$apply( readyFunc( $scope )));
Alguna idea de por qué podría ser? Tal vez una actualización a angular sucedió? De todos modos, es un enfoque elegante, si pudiera funcionar.attrs.onReady
, debería ser lo que es ahora. El otro problema era que lo llamaba funky ... ... lo que obtengo por convertir coffeescript de memoria a JS.$timeout
; Estás creando explícitamente un addt. Nodo DOM simplemente para ejecutar lógica no dom; Solo es reutilizable si ese método reside muy arriba en la jerarquía de $ scope, de modo que los ámbitos secundarios lo hereden; solo creo que se ve mal desde una perspectiva NG;$timeout(function() {})
alrededor de laelem.ready()
. De lo contrario, arrojaba un$digest already in progress
error. Pero de todos modos, ¡muchas gracias! He estado luchando con esto durante la última hora.Puede llamarlo directamente agregando
{{YourFunction()}}
después del elemento HTML.Aquí hay un
Plunker Link
.fuente
Tuve que implementar esta lógica mientras manejaba con google chart. lo que hice fue que al final de mi html dentro de la definición del controlador agregué.
y en esa función simplemente llama a tu lógica.
fuente
El método anterior me funcionó
fuente
puede llamar a la versión de JavaScript del evento onload en angular js. Este evento ng-load se puede aplicar a cualquier elemento dom como div, span, body, iframe, img, etc. El siguiente es el enlace para agregar ng-load en su proyecto existente.
descargar ng-load para angular js
El siguiente es un ejemplo para iframe, una vez que se carga testCallbackFunction se llamará en el controlador
EJEMPLO
JS
HTML
fuente
Si obtiene un error $ digest ya en progreso, esto podría ayudar:
fuente
La ejecución después de la carga de la página debe satisfacerse parcialmente configurando un detector de eventos para el evento de carga de la ventana
Dentro de
module.run(function()...)
de angular tendrá acceso a la estructura del módulo y sus dependencias.Puedes
broadcast
yemit
eventos para puentes de comunicaciones.Por ejemplo:
fuente
Estaba usando
{{myFunction()}}
la plantilla pero luego encontré otra forma aquí usando$timeout
dentro del controlador. Pensé en compartirlo, funciona muy bien para mí.fuente
Si desea que cierto elemento se cargue por completo, use ng-init en ese elemento.
p.ej
<div class="modal fade" id="modalFacultyInfo" role="dialog" ng-init="initModalFacultyInfo()"> ..</div>
la función initModalFacultyInfo () debería existir en el controlador.
fuente
Descubrí que si tiene vistas anidadas, $ viewContentLoaded se activa para cada una de las vistas anidadas. He creado esta solución para encontrar el $ viewContentLoaded final. Parece funcionar bien para configurar $ window.prerenderReady como lo requiere Prerender (entra en .run () en la aplicación principal.js):
fuente
fuente
La solución que funciona para mí es la siguiente
El código del controlador es el siguiente
El código html es el siguiente
fuente
Solía
setInterval
esperar el contenido cargado. Espero que esto pueda ayudarte a resolver ese problema.fuente
setInterval
como solución en 2016 ?