0
votes

angular - la table de matériaux ne se remplit pas du tableau json

pour le code suivant

public getData() {
 this.service.requestData().subscribe(res => {
  let response = JSON.stringify(res);
  let parsedResponse = JSON.parse(response)
  for(let row of parsedResponse.data){
    this.dataSource.push(row)
  }
});

}

les éléments de ligne peuvent être affichés sur la console, mais le tableau qui utilise dataSource n'affiche que les en-têtes de colonne

p >


0 commentaires

3 Réponses :


0
votes

Essayez avec quelque chose comme ceci:

public getData() {
 this.service.requestData().subscribe(res => {
  
  this.dataSource = [];
    this.dataSource =res.data;  
});
}

Il n'est pas nécessaire de stringify puis de reparse la réponse que je pense .. et avant de remplir la source de données, essayez de l'effacer


3 commentaires

Le type 'undefined []' ne contient pas les propriétés suivantes du type 'MatTableDataSource ': _data, _renderData, _filter, _internalPageChanges, et 16 autres. pour la ligne 3


La propriété 'data' n'existe pas sur le type 'Object'. pour la ligne 4


vos données sont-elles dans res .. ou res.data? .. essayez de définir this.dataSource = res;



0
votes

Il vous suffit de réinitialiser votre objet dataSource pour déclencher le nouveau rendu:

this.dataSource = new MatTableDataSource(res.data);

MatTable accepte le dataSource comme entrée et la détection de changement est basée sur des références, pousser un élément vers un tableau ne le déclenchera pas.

Remarque

Si vous utilisez MatTableDataSource , définissez-le:

this.service.requestData().subscribe(res => {
  this.dataSource = [...this.dataSource, ...res.data];
});


0 commentaires

0
votes

Initialisez les données MatTable

 this.service.requestData().subscribe(res => this.dataSource.data = res )

^^ Au lieu de "any", vous devez mettre le type de vos données.

Vous pouvez créer une nouvelle méthode ou vous pouvez simplement écrivez ce code suivant dans ngOnInIt ()

  dataSource: MatTableDataSource<any> = new MatTableDataSource<any>([]);


2 commentaires

Le type 'Object' ne peut pas être affecté au type 'any []'. Le type «Objet» est attribuable à très peu d'autres types. Vouliez-vous plutôt utiliser le type «tout»? en deuxième ligne


@ hitodo9051 avez-vous essayé d'entrer le type de votre objet au lieu de "any"?