Ошибка при попытке diff '[object Object]'. Разрешены только массивы и итерации. (Ионная 3) - PullRequest
0 голосов
/ 01 мая 2018

Я делаю проект и получаю сообщение об ошибке «Ошибка при попытке изменить '[объект объекта]'. Разрешены только массивы и итерации». Я посмотрел на ошибку, и есть два способа сделать это, изменить входящие данные (невозможно) или «превратить объект в мой компонент». Мне нужно сделать последнее, но я не могу найти способ как я только студент. Вот некоторые из соответствующих кодов:

// characters.ts

     apiUrl = 'https://swapi.co/api/people';

     getUsers() {
     return new Promise(resolve => {
     this.http.get(this.apiUrl)
     .subscribe(data => {
      resolve(data);
     }, err => {
     console.log(err);
    });
   });

// home.ts

  users: any= [];

  constructor(public navCtrl: NavController, public restProvider: 
  CharactorsProvider) {
  this.getUsers();
 }


  getUsers() {
  this.restProvider.getUsers()
  .then(data => {
  this.users = data;
  console.log(this.users);
 });
 }

// home.html

 <ion-list>
 <ion-item *ngFor="let user of users">
  <p>{{charactor.results}}</p>
 </ion-item>
 </ion-list>
</ion-content>

Пожалуйста, любая помощь с изменением кода будет огромной помощью. Я новичок в Ионике, всего несколько недель назад и имею базовые знания об этом

изменить: код не в ящиках изменить 2: API я использую https://swapi.co/api/people/

1 Ответ

0 голосов
/ 01 мая 2018

На основе JSON, который вы опубликовали выше, похоже, что у вас есть объект вместо массива.

Как указано выше, ошибка "Error trying to diff '[object Object]'. Only arrays and iterables are allowed" вам нужен массив для перебора с использованием ngFor.

Либо измените API для отправки ответа в виде массива, либо поместите объект в массив.

Также у вас есть проблема в переменной ngFor

<ion-item *ngFor="let user of users">
  <p>{{user.name}}</p> //access each user object from array
 </ion-item>

EDIT

Когда я посмотрел в ответе, на самом деле вы должны получить доступ к свойству результатов из ответа, который является массивом.

this.http.get('https://swapi.co/api/people/')
      .subscribe((res: Response) => {
        this.users = res.json().results; 
      }, error => {
        console.log(error);
        this.errorFromSubscribe = error;
});

HERE IS A WORKING STACKBLITZ

...