Сложность извлечения данных JSON из API с использованием Angular - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь получить данные из API https://sportsbook.draftkings.com/api/odds/v1/leagues/3/offers/gamelines.json

и сохранить их в таблице в моем приложении Angular.На моей странице отображаются первые 15 строк, а не все.И я не могу получить данные строки, которые вложены в конечный объект.

Вот мой HTML-код


  <div class="row">

<mat-toolbar color="primary">
  <span>Welcome!</span>
</mat-toolbar>


<div class="container">
  <br>
  <h2>Information</h2>  

    <span class="right"><a href="https://sportsbook.draftkings.com/api/odds/v1/leagues/3/offers/gamelines.json" title="sportsbook1">API endpoint</a></span>     

   <table class="table  table-hover">
    <thead>
      <tr>
        <th>Id</th>
        <th>Name</th>
        <th>HomeTeamName</th>
        <th>AwayTeamName</th>
        <th>Start Date</th>
        <th>Offers</th>
        <th>Line</th>

        <!--<th>Image</th>-->
      </tr>
    </thead>
    <tbody>
      <ng-container *ngFor="let data of data.events">
      <tr>
        <td>{{data.id}}</td>
        <td>{{data.name }}</td>
        <td>{{data.homeTeamName }}</td>
        <td>{{data.awayTeamName}}</td>
        <td>{{data.startDate }}</td>
        <td>{{data.offers[1].label }}</td>
          <td>{{data.offers.outcomes[2].line }}        

        <!--<td><img class="image-width" src="{{contact.image}}" alt="{{contact.name}}}"></td>-->

      </tr>
    </ng-container>
    </tbody>
  </table>
</div>
</div>



Вот мой машинописный код

import { Component, OnInit } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';
import { MatTableDataSource, MatSort } from '@angular/material';
import { DataSource } from '@angular/cdk/table';

@Component({
  selector: 'app-draftking',
  templateUrl: './draftking.component.html',
  styleUrls: ['./draftking.component.css']
})
export class DraftkingComponent implements OnInit {
 private apiUrl = 'https://sportsbook.draftkings.com/api/odds/v1/leagues/3/offers/gamelines.json';
  displayedColumns = ['id','name', 'homeTeamName','awayTeamName','offers','line'];
  data: any = {};
  dataSource = this.data;

 constructor(private http: Http) {
  this.getLeague1();
  this.getData1();

 }


getData1(){
 return this.http.get(this.apiUrl)
  .map((res: Response) => res.json())
}

getLeague1() {
  this.getData1().subscribe(data => {
    console.log(data);
    this.data = data
  })
}
 ngOnInit() {
  }

}

1 Ответ

2 голосов
/ 11 июня 2019

Обычно вы настраиваете фактический серверный вызов в службе (называемой моделью, потому что она моделирует ваши данные).Вот один из моих примеров.

service.ts

@Injectable()
export class ApiService {
    constructor(private http: HttpClient) { }

    public get<T>(path: string, routerParams?: Params): Observable<T> {
        let queryParams: Params = {};
        if (routerParams) {
            queryParams = this.setParameter(routerParams);
        }
        return this.http.get<T>(this.path(path), { params: queryParams });
    }

    public put<T>(path: string, body: Object = {}): Observable<any> {
        return this.http.put(this.path(path), body);
    }

    public post<T>(path: string, body: Object = {}): Observable<any> {
        return this.http.post(this.path(path), body);
    }

    public delete<T>(path: string): Observable<any> {
        return this.http.delete(this.path(path));
    }
    ...

В моих компонентах (иногда других службах) я буду вызывать метод API и ожидать результатов в форме Observable,Так что в вашем случае я бы использовал мой сервис следующим образом:

component

constructor(private apiService: ApiService) { }

ngOnInit() {
    this.apiService('https://pathtoserver').subscribe(data => {
        if (data.id) {
            this.setCurrentUser();
        }
    });
}   

Не забывайте НЕ вызывать getData1 ();более одного раза или у вас будет 2 "горячие" подписки.Используйте .pipe(take(1)).sub ... для прекращения подписки, как только они вам что-то дадут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...