Minitip: Llamar a AngularJS desde “fuera” de Angular

Openlayers se lleva ligeramente mejor que IE9 con AngularJS, pero tampoco demasiado. En concreto, cuando se intenta configurar el “popup” del mapa para que tenga un enlace que llame a un procedimiento de Angular, como se carga “fuera” del controlador, te hace el mismo caso que el que oye llover.

Esto es generalizado y pasa con cualquier código “fuera” del ámbito de los controladores, así que me pareció interesante hacer un post sobre ello, porque además es muy sencillo de hacer.

La solución: En la acción en la que quieras llamar a Angular, usar esta instrucción:

angular.element(document.getElementById('[id]')).scope().[funcion()];

Siendo [id] el id del elemento de la página donde está definido el controladror donde está la función que se quiere llamar, y [funcion()] la función a la que se quiere llamar.

Además, si la función implica cambiar valores del controlador, hay que añadir la instruccción:

angular.element(document.getElementById('[id')).scope().$apply();

Y ya 😀

(Ojo: En la página que está cargada tiene que haber un elemento con un controlador de angular declarado. Si no, el document.getElementById no tiene sentido)

Como siempre, espero que esta entrada pueda ser de utilidad para alguien. Y si no, pues también como siempre, aquí tenéis un gato para compensar:

 

CaXvu4UXEAEecPq

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.