2017-04-12 3 views
-1

Comme beaucoup d'autres avant moi, j'ai cette erreur:Une fois NgFor ne supporte que la liaison à Iterables tels que des tableaux

Error: Cannot find a differ supporting object '[object Object]' of type 'object'. NgFor only supports binding to Iterables such as Arrays. 

je tentais de nombreuses solutions comme: error display in *ngfor json array object

Mais rien ne fonctionne.

public getInterfaces(): Observable<InterfaceBrief[]> { 
    let headers = this.createBasicHeaders(); 
    let options = new RequestOptions({ 
     method: 'get', 
     headers: headers}); 
    let url = this.restApi +"/dashboard/list"; 
    console.log(url); 
    return this.http.get(url, options) 
     .map(this.extractData) 
     .catch(this.handleError); 
    } 

private extractData(res: Response) { 

    let body = res.json(); 
    console.log("GOOD"); 
    return body.data || {}; 
    } 

export class DashboardComponent implements OnInit { 

    errorMessage: string; 
    interfacesBrief: InterfaceBrief[]; 

    constructor(private _service: AuthService, private _emotService: EmotClientService) { 
    } 
    ngOnInit() { 
    this.getInterfaces(); 
    } 
    getInterfaces() { 
    this._emotService.getInterfaces().subscribe(

     data => this.interfacesBrief = data, 
     error => this.errorMessage = <any>error 
    ); 
    } 
} 

Quand je changé:

return body.data || {}; 

à:

return body.data.items || {}; 

J'ai erreur:

Cannot read property 'items' of undefined 

ERR: Impossible de lire la propriété 'données' undefined

+1

s'il vous plaît postez votre code html contenant '* ngFor' –

+1

Il ne semble pas lié à '* ngFor' si' body.data' n'a pas 'items'. –

+0

À quoi ressemble votre JSON? – Alex

Répondre

1

Sur la base de commentaires, lorsque vous CONSOLE.LOG votre réponse: Array[2] 0 : Object 1 Object client: "client1" countKO: 3 (...) vous clairement pas avoir un objet data dans votre réponse, donc vous devriez juste retourner la réponse que est.

private extractData(res: Response) { 
    let body = res.json(); 
    return body || []; // here! 
} 

Et quand vous avez reçu votre réponse, vous venez itérer ce tableau et d'afficher les propriétés que vous voulez, donc quelque chose comme ceci:

<div *ngFor='let item of interfacesBrief'> 
    {{item.client}} - {{item.countKO}} 
    <!-- print whatever else properties you have and want to display --> 
</div> 
+0

cela fonctionne Mais pourriez-vous me l'expliquer, pourquoi il.. n'a pas fonctionné comme dans la documentation officielle ?? Pourquoi les données ne sont pas présentes ?? Dans l'autre demande (poste pour un article) il travaillait avec le corps? – VANILKA

+0

Vous n'avez pas un objet 'data' qui contiendrait le tableau, dans la réponse, vous obtenez simplement un tableau.Votre réponse ressemble à ceci: '{{object1 content}, {object2 content}]' et pas comme ceci: '{data: [{object1 content}, {object2 content}]}'. – Alex

+0

Comment la réponse ressemble quand elle vient, dépend uniquement de ce que vous envoyez du backend et dans quelle structure :) – Alex

0
  • retour ne res.json() (pourquoi becasue parfois si les données ne sont pas proerply tiré par les cheveux que angulaire jetteront erreur ici). Essayez d'utiliser l'opérateur elvis (navigation sécurisée) dans le code HTML.

Essayez ce code

private extractData(res: Response) { 

    let body = res.json(); 
    console.log("GOOD"); 
    return body || {}; 
    } 

    export class DashboardComponent implements OnInit { 
    ............... 

    getInterfaces() { 
    this._emotService.getInterfaces().subscribe(

     data => { 
     this.interfacesBrief = data 
     console.log(this.interfacesBrief ,"Without Error") 
     }, 
     error => this.errorMessage = <any>error 
    ); 
    } 
} 

<div *ngFor='let items of interfacesBrief?.data?.items'> 
    {{items}} 
</div> 
+0

dans le journal de la console je vois "[Object, Object]" sans erreur "., Mais les éléments ne sont pas apperas int. En réponse, je vois que la liste est correctement pris du repos api – VANILKA

+0

essayez de consoler ici' console.log (corps, "GOOD «);' –

+0

Array [2] : objet objet client: "client1" countKO: 3 (...) donc, son ok – VANILKA