No voy a repetir lo que otros han dicho sobre: el hackyness de t su práctica. Pero puede ser increíblemente útil cuando se usa un marco rígido como Angular mezclado con código vainilla HTML/JS (o jQuery). Lo cual también es hacky y mal visto, pero a veces hay buenas razones, como si tienes muchos códigos JS preexistentes que serán difíciles de integrar en el marco.
La pregunta más interesante para mí es CÓMO hacer uso de la capacidad de agregar propiedades al objeto global window
. Hay un patrón que uso cuando quiero exponer los métodos de un proveedor angular (servicio) a un código que de otro modo no podría inyectar el servicio, probablemente porque se ejecuta fuera del marco de DI angular. La forma en que lo hago es la siguiente:
- Defina su servicio como proveedor en su módulo de nivel superior.
- En el constructor o onInit de app.component.js (o lo que su componente de nivel superior es que las importaciones del proveedor), inyecte el proveedor normalmente, lleve a cabo cualquiera de inicialización de tiempo que necesita, y luego llamar a
window['MyServiceName'] = this
Suponiendo que haya diseñado el proveedor para seguir un patrón de Singleton, los métodos de su proveedor ahora se pueden llamar de forma segura desde cualquier lugar. Una secuencia de comandos no angular necesita simplemente llamar al window['MyServiceName'].methodName()
Consulte esto: http://stackoverflow.com/questions/864942/, No quise cambiar 'window.name', así que usaré algún nombre raro que se encuentre fuera de mi aplicación solo. – akkishore
bien, parece que solo 'window.name' se conserva en las recargas :( – akkishore
+1 para responder a las tres preguntas de OP de manera informativa – ddtpoison777