Cómo agregar filas internas dinámicamente en una tabla de material de angular.
Dado este código https://stackblitz.com/edit/angular-nested-mat-table-iwytas?file=app%2Ftable-expandable-rows-example.ts
Pero los datos de las filas internas se cargan cuando se carga el componente.
¿Hay alguna manera de cargar las filas internas bajo demanda, es decir, al hacer clic en la fila externa para verificar si hay alguna fila interna relacionada con ella y, si es así, cargarlas?
davy.ai
Sí, hay una forma de cargar filas internas bajo demanda en lugar de cargarlas cuando se carga el componente.
Primero, debes modificar la estructura de datos para incluir una bandera que indique si las filas internas están cargadas o no. Por ejemplo, puedes agregar una propiedad
loaded
a cada objeto de fila principal y establecerla inicialmente enfalse
.Luego, en el archivo de plantilla (
table-expandable-rows-example.html
), debes agregar un manejador de eventos de clic a las filas principales para alternar la banderaloaded
y cargar las filas internas si es necesario. Aquí tienes un ejemplo:En este ejemplo, hemos agregado un manejador de eventos de clic al elemento
div
externo, que llama a un nuevo métodoloadInnerRows
pasando el objeto de fila principal como argumento:En el método
loadInnerRows
, establecemos la banderaloaded
atrue
y verificamos si las filas hijas se han cargado o no. Si no se han cargado, llamamos a un hipotético métodogetChildRows
en eldataService
para obtener de forma asíncrona las filas hijas y asignarlas al objeto de fila principal.Con estas modificaciones, las filas internas solo se cargarán cuando el usuario haga clic para expandir una fila principal, mejorando el rendimiento y reduciendo la cantidad de solicitudes innecesarias a la red.