Saltar al contenido

El método correcto para actualizar un MatTableDataSource en angular 2 versión 6

Por fin después de tanto batallar pudimos dar con el arreglo de esta impedimento que agunos usuarios de nuestro sitio web han tenido. Si deseas compartir alguna información no dudes en dejar tu información.

Solución:

He encontrado un método mejor, que evita tener que inyectar el servicio ChangeDetectorRefs usando el decorador de propiedades @ViewChild.

A continuación se muestra un ejemplo de código:

@ViewChild(MatTable) table: MatTable;

luego simplemente llame al método renderRows() en ese decorador de propiedades, ejemplo a continuación:

  refresh(): void
    this.service.method().subscribe(resources => 
      this.dataSource.data = resources; 
      this.dataSource.sort = this.sort;
      this.dataSource.paginator = this.paginator;
    );
    this.table.renderRows();
  

Esta es la mejor solución a esto que he encontrado que funciona hasta ahora para mí.

Uso de material angular 6.4.7.

Espero que esto ayude.

Cree un nuevo objeto MatTableDataSource una vez en el componente init, luego agregue array que está llegando a dataSource.data

dataSource.data es array de datos que deben representarse por tabla, donde cada objeto representa una fila, por lo que no crea una nueva instancia de objeto en cada cambio.

Se puede utilizar ChangeDetectorRef. Está buscando cambios en un componente dado.

 constructor(private changeDetectorRefs: ChangeDetectorRef) 

 refresh()
  this.PHService.getResources().subscribe(resources => 

     this.dataSource.data = resources;
     this.dataSource.sort = this.sort;
  );
    this.changeDetectorRefs.detectChanges();
 

Comentarios y puntuaciones del artículo

Si haces scroll puedes encontrar las explicaciones de otros programadores, tú además eres capaz insertar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *