¿Cómo generar el componente Angular 4 dentro de una ventana emergente de marcador de folleto?

He sido un usuario largo de Angular 1.x y ahora estoy trabajando en hacer una nueva aplicación usando Angular 4. Todavía no entiendo la mayoría de los conceptos, pero finalmente tengo algo que funciona realmente bien. Sin embargo, tengo un problema en el que necesito mostrar un componente Angular 4 (aunque en 1.x solo usé directivas) dentro de una ventana emergente de Marcador usando Leaflet.

Ahora, en Angular 1.x podría usar $ compile contra una plantilla con la directiva dentro de ella (`<component>{{ text }}</component>`) con botones y tal y funcionaría, pero Angular 4 es totalmente diferente con su AoT y compilar en tiempo de ejecución parece ser realmente difícil y no hay una solución fácil para ello.

Hice una preguntaaquí y el autor dice que podría usar una directiva. No estoy seguro de si este es el enfoque correcto o incluso cómo mezclar mi propio código con su solución propuesta ... así que hice un pequeño proyecto basado en npm con Angular 4 y Leaflet ya configurado en caso de que sepa cómo ayudar yo o quiero probarlo (¡lo aprecio mucho!). He estado golpeándome la cabeza por esto durante quizás una semana y estoy realmente cansado de probar muchas alternativas sin éxito :(

Aquí está el enlace de mi repositorio en GitHub:https://github.com/darkguy2008/leaflet-angular4-issue

La idea es generar PopupComponent (o algo similar) dentro de un Marker, código que puede encontrar en src / app / services / map.service.ts, línea 38.

¡Gracias por adelantado! :)

EDITAR

Logré resolverlo :) vea la respuesta marcada para más detalles, o esta diferencia. Hay algunas advertencias y el procedimiento para Angular 4 y Leaflet es un poco diferente y no requiere tantos cambios:https://github.com/darkguy2008/leaflet-angular4-issue/commit/b5e3881ffc9889645f2ae7e65f4eed4d4db6779b

También hice un Servicio de compilación personalizado a partir de esta solución explicadaaquí y subido al mismo repositorio de GitHub. Gracias @yurzui! :)

Respuestas a la pregunta(1)

Su respuesta a la pregunta