63 votes

Erreur en essayant de diff '[object Object]' dans Angular

On dirait que quelque chose ne va pas avec la variable freight en HTML :

Erreur dans app/freightList.component.html:13:8 Error trying to diff [objet Objet]

Voici le code

freight.service.ts
=======================

    getFreight (): Promise<Freight[]> {
        return this.http.get(this.freightUrl)
                  .toPromise()
                  .then(this.extractData)
                  .catch(this.handleError);
    }

  private extractData(res: Response) {
      let body = res.json();
      return body || { };
  }

freightList.component.ts
========================
    getFreight() {
        this.freightService
            .getFreight()
            .then(freight => this.freight = freight)
            .catch(error => this.error = error); // TODO: Display error message
    }

freightList.component.html
============================

       <tr *ngFor="let frght of freight">
       <td>{{frght.grp}} - {{frght.grpname}}</td>
       <td>{{frght.subgrp}} - {{frght.subgrpname}}</td>
       <td>{{frght.prodno}} - {{frght.prodname}}</td>
       <td>{{frght.percent}}</td>
       <td>{{frght.effective_date}}</td>
       <td><button (click)="deleteFreight(frght, $event)" class="btn btn-danger btn-sm"><span class="glyphicon glyphicon-remove"></span> Remove</button></td>
       <td><button (click)="editFreight(frght)" class="btn btn-warning btn-sm"><span class="glyphicon glyphicon-edit"></span> Edit</button></td>
       </tr>

Response body
==================

    [{
        "effective_date": "01/01/2016",
        "grp": "01",
        "grpname": "STOPS/FLEX HOSES/COVER PLATES",
        "id": "1",
        "percent": "10",
        "prodname": "DWV PVC PIPE 100MM X 6MTR SN6  SWJ",
        "prodno": "1400200",
        "subgrp": "02",
        "subgrpname": "DWV PIPE - UP TO 150MM"
    }, {
        "effective_date": "01/02/2016",
        "grp": "01",
        "grpname": "STOPS/FLEX HOSES/COVER PLATES",
        "id": "2",
        "percent": "11",
        "prodname": "PVC PIPE    100MM X 6MTR SWJ SN10",
        "prodno": "1400201",
        "subgrp": "03",
        "subgrpname": "DIMPLEX BATHROOM ACCESSORIES"
    }]

111voto

retrospectacus Points 2035

Votre extractData (et peut-être aussi votre API HTTP) renvoie un objet {} - ngFor nécessite un tableau [] pour itérer.

Modifiez votre service/API pour produire un tableau, ou transformez l'objet dans votre composant.

1 votes

Comment faites-vous cela dans le service ?

0 votes

Changement return body || { }; à return body || []; pour le cas d'un résultat vide ; sinon, cela dépendrait de ce que l'option freightUrl http get est en train de produire. Il devrait produire un tableau de ces objets de fret.

3voto

LiveOrDevTrying Points 31

Le problème (pour moi) était dans ma définition de newState. Voici la définition correcte :

const newState = (state, newData) => {
    return Object.assign([], state, newData);
}

Mon newState convertissait mon tableau en objet parce que j'utilisais les mauvaises parenthèses - la mauvaise méthode est ci-dessous.

const newState = (state, newData) => {
    return Object.assign({}, state, newData);
}

Bonne chance, j'espère que cela vous aidera, Rob

1voto

Neil Pimley Points 11

J'ai rencontré ce problème lorsque j'ai modifié la WebApi que j'appelais pour qu'elle renvoie un message de type Task<IActionResult> au lieu de l'ancien IEnumerable<object> . Vérifiez que la réponse n'est pas enveloppée dans un objet. J'ai dû modifier ma méthode extractData en :

private extractData(res: Response) {
   let body = res.json();
   return body.result || body || { };
}

0 votes

Merci, j'utilisais "data as Node[]", et je m'attendais à ce qu'une exception soit levée si cela ne passait pas.

-3voto

Le meilleur moyen est de prendre le NgForm et appeler son reset() fonction.

Exemple :

Fichier Html

<form #exampleform='ngForm'>

</form>

Fichier ts

@ViewChild('exampleform') exampleform :NgForm;

this.exampleform.reset(); // resets the form

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X