Carga de lista de componentes de Angular desde archivo json.
Estoy usando Angular 13 y estoy buscando una forma de cargar una lista de componentes leyendo los nombres de los componentes desde un archivo json.
Por ejemplo, tengo un archivo json con los nombres de los componentes que quiero cargar en mi app.component.html:
componentListToLoad = [
{
"name": "Componente1"
},
{
"name": "Componente2"
}
]
Luego en un bucle for cargaría los dos componentes:
<div *ngfor="let list of componentListToLoad">
// Cargar la lista de componentes
</div>
¿Cómo puedo hacer esto en Angular?
davy.ai
Para cargar componentes de manera dinámica en Angular 13 leyendo sus nombres desde un archivo JSON, puedes seguir estos pasos:
El método
getComponentList()
utiliza elHttpClient
de Angular para realizar una petición GET al archivoassets/components.json
y devuelve unObservable
de un arreglo de cadenas.entryComponents
en el módulo de la aplicación, para que puedan resolverse en tiempo de ejecución:Nota que el arreglo
entryComponents
contiene los nombres de los componentes que quieres cargar dinámicamente.ComponentFactoryResolver
para crear fábricas de componentes para los componentes cargados dinámicamente:El
AppComponent
tiene unViewContainerRef
que representa la ubicación donde se insertarán los componentes cargados dinámicamente. En el métodongOnInit()
, se utilizaComponentService
para obtener la lista de componentes para cargar, y para cada nombre de componente, se crea una fábrica utilizandoComponentFactoryResolver
. Finalmente, elViewContainerRef
se utiliza para crear una instancia de componente llamando acreateComponent(factory)
.Component1
yComponent2
:Nota que los nombres de los selectores de componente coinciden con los nombres de los componentes definidos en el archivo
assets/components.json
.assets/components.json
con los nombres de los componentes que quieres cargar:Este archivo contiene un arreglo de cadenas, cada cadena representa un nombre de componente.
HttpClientModule
a los imports deAppModule
:Esto permite que el
ComponentService
utilize elHttpClient
de Angular.Con estos pasos, ahora tienes una manera de cargar los componentes de manera dinámica en Angular 13 leyendo sus nombres desde un archivo JSON.</string[]></string[]>