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