Maison > Questions et réponses > le corps du texte
En utilisant *ngFor, je suis capable de restituer les données mais cela génère cette erreur
Erreur Erreur : NG0900 : Une erreur s'est produite lors de la tentative de comparaison de « [objet Objet] ». Seuls les tableaux et les objets itérables sont autorisés
C'est ma méthode de service
async getEditions(): Promise<Observable<Cigales>> { return this.http.get<Cigales>(url+"/candidates/editions", httpOptions).pipe( tap((getEditions: Cigales) => this.log('getEditions' + getEditions)), catchError(this.handleError<Cigales>('getEditions')) ); }
C'est ma méthode de composants
editions: Cigale[] = []; async getEditions(): Promise<void> { await this.CigalesService.getEditions().then(res=> { res.subscribe(data => { this.editions = []; this.editions = data.content; }) }) }
Voici mon interface Cigales
export interface Cigales { content: Array<Cigale>, pageable: pageable, last: string; totalPages: string; totalElements: string; size: string; number: string; sort: sort; first: string; numberOfElements: string; empty: string; } export interface Cigale { id?: string; eventName: string; eventStartDate: string; eventEndDate: string; } type sort = { empty: boolean, sorted: boolean, unsorted: boolean } type pageable = { sort: sort, offset: string; pageNumber: string; pageSize: string; paged: string; unpaged: string; }
Voici mon composant.html
<tr *ngFor="let item of editions"> <td>{{item.eventName}}</td> <td>{{item.eventStartDate}}</td> <td>{{item.eventEndDate}}</td> <td> <a class="d-inline" role="button" data-bs-toggle="modal" data-bs-target="#application-modal"><i class="bi bi-clipboard"></i></a> <a class="d-inline" role="button" data-bs-toggle="modal" data-bs-target="#application-modal"><i class="bi bi-pencil-square"></i></a> </td> </tr>
Console.log(this.editions) et j'obtiens un tableau de deux objets
Résultats console
EDIT : J'ai essayé Array.isArray(this.editions) et cela renvoie vrai
P粉8525780752024-02-26 14:43:53
Tout d'abord, l'erreur à laquelle vous êtes confronté est liée au fait que vous essayez d'utiliser un objet au lieu d'un tableau comme source de données pour la directive *ngFor.
Deuxièmement, essayez d'attribuer des données à this.editions, par exemple :
async getEditions(): Promise{ await this.CigalesService.getEditions().then(res=> { res.subscribe(data => { this.editions= [...data.content]; }) }) }
De plus, je vous recommande d'éviter d'utiliser Promises dans les applications Angular et de rendre votre code plus réactif en tirant parti des abonnements.