Cómo crear una ventana emergente modal compatible con Angular 4
Quiero ser capaz de crear una ventana emergente que cargará un determinado componente Angular 4 mío cuando se selecciona un botón de radio.
Parece que los métodos que aparecen en las respuestas a esta pregunta solo son compatibles con Angular 2.
No sé por dónde empezar y agradecería cualquier ayuda.
19
2
La respuesta aceptada añade una gran dependencia para matar una mosca. Los diálogos modales (y sin modelo) son en gran parte el resultado de una clase CSS o dos. Pruebe este "renombrar..." ejemplo:
HTML padre que utiliza `` hijo:
Clase padre. El decorador
@Component
omitido por brevedad. (La propiedadname
pertenece a la clase padre y existiría aunque no tuviéramos un formulario para modificarla).Componente hijo a modalizar. Decorador
@Component
e importaciones omitidas de nuevo.HTML hijo antes de modalizarlo.
modal
y está pensada para un elemento<div>
.Pero la clase CSS
modal
no impide interactuar con la página que hay debajo. (Así que colocamos unoverlay
debajo del modal para absorber e ignorar la actividad del ratón.overlay
también está pensado para un elemento<div>
.modal
y eloverlay
en el HTML hijo.Y eso'es todo. Básicamente 2 clases CSS y puedes hacer de cualquier componente un modal. De hecho puedes mostrar un componente en línea o como modal en tiempo de ejecución simplemente alterando la existencia de la clase CSS con
ngClass
o[class.modal]="showAsModalBoolean"
.Puedes alterar esto para que el hijo controle la lógica de mostrar/ocultar. Mueve las funciones *ngIf, showIt, y show() al hijo. En el padre añade
@ViewChild(MyModalComponent) renameModal: MyModalComponent;
y entonces el padre puede imperativamente llamar athis.renameModal.show(this.name);
y re-cablear la inicialización y los divs contenedores como sea necesario.El módulo hijo puede devolver información a una función padre como se muestra arriba, o el método
show()
del módulo hijo puede aceptar una llamada de retorno o devolver una Promise, según se prefiera.Dos cosas que hay que saber:
this.renameModal.show(..);
no funcionará si hay un ngIf en `` porque para empezar no existirá para exponer la función. ngIf elimina todo el componente, función show() y todo, así que usa[hidden]
en su lugar si necesitas esto por alguna razón.Modals-on-modals tendrán problemas de z-index ya que todos comparten el mismo z-index. Esto puede resolverse con `[style.z-index]="calculatedValue"o similar.
Compruebe Angular Material Dialogue, aquí está el Plunker