Как я могу напечатать значения моего объекта (атрибуты)? - PullRequest
0 голосов
/ 16 марта 2020

модель:

     export interface People {
       count: number,
       next: string,
       previous: any,
       results: {
          name: string;
          height: string;
          mass: string;
          hair_color: string;
          skin_color: string;
          eye_color: string;
          birth_year: string;
          gender: string;
          homeworld: string;
          films: string[];
          species: string[];
          vehicles: string[];
          starships: string[];
          created: Date;
          edited: Date;
          url: string;
        }
      }

служба:

     export class StarwarsService {

     private url: string = "https://api.codetabs.com/v1/proxy?quest=https://swapi.co/api/";
     result: Array<any> = [];

     constructor(private http: HttpClient) { }

     getByContent(route: string): Observable<any> {
     for(let i = 1; i < 87; i++) {
     this.result.push(this.http.get<{people: People[]}>(`${this.url}${route}/?page=${i}`));

     }
     }

компонент:

        export class TableComponent implements OnInit {
        people: People[] = [];

        constructor(private starWarsServ: StarwarsService) { }


        ngOnInit() {
          try {
            this.starWarsServ.getByContent(`${this.route}`)
            .subscribe(data => {
              {console.log(data['results']); this.people = data['results'].name;}
            })


          catch(err) {
            throw err;
          }
          }

Я пытаюсь распечатать данные []. Results.name, но всегда возвращается undefined.

Я устанавливаю свои объекты так же, как API.

Я много чего пробовал, но не могу напечатать. Извините, если это простая задача, но я только начал программировать ... спасибо!

....................... .............

Ответы [ 2 ]

0 голосов
/ 16 марта 2020
Try this one    
 getByContent(route: string,page:number): Observable<any[]> {


   for(let i = 1; i < 87; i++)
        this.result.push(this.http.get<any>(`${this.url}${route}/?page=${i}`));

     return forkJoin(this.result); 
       }


In compo
this.starWarsServ.getByContent(`${this.route}`)
            .subscribe(data => {
            for (item in data )
console.log(item.name)
            });
0 голосов
/ 16 марта 2020

Андре, http.client не работает, как вы думаете. httpClient.get возвращает Observable (не результат), и вы получили данные в подписке. Итак, сначала вы должны вернуть getByContent наблюдаемой.

Имеет только наблюдаемый вами простой

getByContent(route: string,page:number): Observable<any[]> {
     return this.result.push(this.http.get(`${this.url}${route}/?page=${page}`));
}

При необходимости сделать несколько независимых вызовов вам нужно использовать forkJoin

   result: Array<any> = [];
   getByContent(route: string,page:number): Observable<any[]> {
     for(let i = 1; i < 87; i++)
        this.result.push(this.http.get(`${this.url}${route}/?page=${i}`));

     return forkJoin(this.result) //<---return forkJoin
   }

forkJoin вернуть массив с таким количеством элементов ваш массив наблюдаемых (в вашем случае 86)

ПРИМЕЧАНИЕ: создайте файл console.log (data), чтобы узнать, какие данные вы получили

...