Ionic 3 - Ошибка преобразования данных JSON в объект, затем отображается в списке

1

Я создаю приложение для путешествий с использованием Ionic 3, Angular и Cordova, с целью получения информации о поездке с сайта transportAPI.com для отображения в списке.

HTML для страницы списка:

    <ion-content padding>
  <ion-list>
    <ion-item *ngFor = "let train of trainList">
      {{train.name}}
    </ion-item>
  </ion-list>
</ion-content>

Код для моей домашней страницы, home.ts:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { TravelServiceProvider} from '../../providers/travel-service/travel-service';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  trainList = [];

  constructor(private travelService : TravelServiceProvider) {
    this.getTravel();
  }

  getTravel(){
    this.travelService.getTravel().subscribe(data => this.trainList = data);
  }
}

Мой класс провайдера выглядит следующим образом:

@Injectable()
export class TravelServiceProvider {

  private url : string = "http://transportapi.com/v3/uk/places.json?query=&type=train_station&app_id=91676f07&app_key=e10dc441385db6f855e3e5ad29bcd6c8";

  constructor(private http: Http) {
    console.log('Hello TravelServiceProvider Provider');
  }

  getTravel(){
    return this.http.get(this.url)
    .do(this.logResponse)
    .map(this.extractData)
    .catch(this.catchError)
  }

  private logResponse(res : Response){
    console.log(res);
  }

  private extractData(res : Response){
    return res.json();
  }

  private catchError(error : Response | any){
    console.log(error);
    return Observable.throw(error.json().error || "Server Error" );
  }
}

Я ожидаю, что названия поезда в JSON будут напечатаны в форме списка, выражением * ngFor в HTML, но вместо этого вместо {{train.name}} ничего не отображается, и я получаю ошибку " Ошибка при попытке разделить "объект объекта". Разрешены только массивы и итеративы ".

Любая помощь приветствуется.

  • 0
    вы получаете массив в вашем trainList?
  • 0
    да, но с заголовком ответа, а не телом.
Показать ещё 1 комментарий
Теги:
angular
ionic-framework

1 ответ

0
Лучший ответ

Поскольку ошибка говорит, что вам необходимо предоставить массив для ngFor, я думаю, вам нужно получить доступ к свойству-члену объекта ответа, который является массивом, изменить его как

this.travelService.getTravel().subscribe((data:any) => this.trainList = data.member);
  • 0
    что означает: любой в данных?
  • 0
    это означает, что тип ответа любой, так что вы можете получить доступ к его членам с помощью оператора точки
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню