Florida tacón 9cm 02 Zuecos Altura Chika10 de cuero piel FPx460xqwt

Índice de contenidos

1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Slimbook Pro 2 13.3″ (Intel Core i7, 32GB RAM)
  • cuero 9cm Zuecos tacón de 02 Altura Florida Chika10 piel Sistema Operativo: LUbuntu 18.04
  • Visual Studio Code 1.24.0
  • @angular/cli 6
  • @angular 6
700 Mujer Oro Two Nike Rosa Roshe Nike SE Roshe 881188 wH4nZg0q

2. Introducción

Cuando desarrollamos aplicaciones web con Angular nos podemos encontrar con el caso de tener que visualizar componentes de forma dinámica en base a una cierta lógica de negocio; pero no me refiero a que un componente padre renderice uno u otro hijo en función de un *ngIf, nos estamos refiriendo a instanciar el componente de forma dinámica. El componente debe existir ya.

Un caso de uso que cada vez es más habitual es en el que tenemos una tabla con registros donde cada uno tiene un tipo diferente y en función de ese tipo al hacer click sobre la fila queremos mostrar el componente que le corresponda.

3. Vamos al lío

En cualquier proyecto de Angular CLI que tengamos podemos crear nuestro componente dinámico que será el encargado de a través de las clases ComponenteFactoryResolver y ViewContainerRef instanciar la clase del componente que le indiquemos y sus inputs asociados. Para crearlo simplemente ejecutamos:

SE 401 Air 876005 Ultra 0 90 Nike Max 2 7qYxfR

Esto nos va a crear el fichero dynamic.component.ts donde establecemos la siguiente implementación:

  • (1) Al tratarse de un componente contenedor hacemos uso de ng-tamplate y le damos un identificador por el que poder ser recuperado.
  • (2) A través del anterior identificador y con la ayuda de la clase ViewContainerRef nos quedamos con la referencia del ng-template
  • (3) Establecemos una propiedad de entrada con @Input donde vamos a recibir un objeto que va a tener el componente a instanciar y los inputs que tenga asociados. Se va a encargar de instanciar el componente, gestionar la destrucción del mismo y establecer los inputs requeridos.
  • (4) Si no hay data directamente devolvemos el control.
  • (5) Solo es caso de que el componente a instanciar tenga inputs asociados los establecemos dentro de la variable inputProviders.
  • (6) Creamos el objeto resolvedInputs a través de inputProviders gracias a la clase RefectiveInjector que proporciona Angular.
  • (7) Creamos el objeto injector necesario para resolver las dependencias que el componente a instanciar pueda injectar a través del constructor.
  • (8) A través de la instancia del componente proporcionado se crea una factoria.
  • (9) A través de la factoria se crea el componente pasándole el objeto injector.
  • (10) Se inserta el componente creado en el área marcada con ng-template del componente contenedor.
  • (11) En caso de que ya exista un componente lo destruimos para crear uno nuevo.
  • (12) Establecemos el componente como el componente actual.
  • (13) Inyectamos a través del constructor la clase ComponentFactoryResolver necesaria para la lógica del componente contenedor.

Antes de poder utilizar este componente tenemos que tener una cosa en cuenta, y es que los componentes que vayamos a visualizar de forma dinámica al no poner explícitamente su selector en ningún sitio necesitan ser declarados en la propiedad entryComponents (a parte de declarations) del @NgModule correspondiente.

Ahora en cualquier template de cualquier componente podemos hacer uso del componente contenedor de esta forma:

Y en la lógica de ese componente establecer un valor para componentData, pasándole los inputs del componente si es que los tuviera.

Y para recuperar el input “name” establecido, no podemos hacerlo con @Input, sino que tenemos que hacer uso de la clase Injector de Angular, de este forma:

4. Conclusiones

Como véis le hemos dado una solución muy sencilla y elegante a un caso de uso que sin esta implementación podría volverse inmanejable simplemente conociendo y exprimiendo un poco este framework tan poderoso.

Recordad que esta técnica y otras muchas más las encontraréis en BY8763 Adidas Runner Azules Primeknit Adidas hielo NMD NMD BY8763 R1 R1 qIrIfF y también ofrecemos br Altura Mustang Double br negro Mustang Zapatos plataforma 7cm Zapatos YqHn0wT.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos.