Sandra, parte de este equipo, nos ha hecho el favor de redactar este escrito ya que controla muy bien dicho tema.
Solución:
Si no se proporciona el segundo parámetro, “retraso”, el comportamiento predeterminado es ejecutar la función después de que el DOM haya completado la representación. Entonces, en lugar de setTimeout, use $timeout:
$timeout(function ()
//DOM has finished rendering
);
Tuve el mismo problema y creo que la respuesta realmente es no. Vea el comentario de Miško y alguna discusión en el grupo.
Angular puede rastrear que todas las llamadas de función que realiza para manipular el DOM están completas, pero dado que esas funciones podrían desencadenar una lógica asíncrona que aún actualiza el DOM después de su regreso, no se puede esperar que Angular lo sepa. Cualquier devolución de llamada Angular da puede que funciona a veces, pero no sería seguro confiar en él.
Resolvimos esto heurísticamente con un setTimeout, como lo hiciste tú.
(Tenga en cuenta que no todos están de acuerdo conmigo; debe leer los comentarios en los enlaces anteriores y ver qué piensa).
Puede usar la función ‘enlace’, también conocida como postLink, que se ejecuta después de colocar la plantilla.
app.directive('myDirective', function()
return
link: function(scope, elm, attrs) /*I run after template is put in */ ,
template: 'Hello'
);
Lea esto si planea hacer directivas, es de gran ayuda: http://docs.angularjs.org/guide/directive
Te invitamos a secundar nuestro cometido exponiendo un comentario o dejando una puntuación te estamos eternamente agradecidos.