Добавление Omdb Api с использованием fetch? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь использовать API OMDB, используя fetch, и вижу в сети, что моя база данных работает.Однако это не отображается на моей угловой странице 6.Чего мне не хватает в этом коде?

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class DataService {

  constructor(private http: HttpClient) { }

  getData() {
    return fetch('http://www.omdbapi.com/?i=tt3896198&apikey=9fa6058b'); 
  } 
}

и это

import { DataService } from './../data.service';
import { Component, OnInit } from '@angular/core';
import {Observable} from 'rxjs';

@Component({
  selector: 'app-movie-list',
  templateUrl: './movie-list.component.html',
  styleUrls: ['./movie-list.component.css']
})
export class MovieListComponent implements OnInit {

  movies = [
    {Title: 'Harry Potter'},
    {Title: 'Space Jam'}
  ]

  constructor(private data:DataService) { }

  ngOnInit() {
    // fetch('http://www.omdbapi.com/?i=tt3896198&apikey=9fa6058b')
    //   .then(response => response.json())
    //   .then( res => this.movies = res);

    this.data.getData()
      .then((response) => {response.json()
      .then((data)=> {this.data = data;
      });
    });
  }

и это

<p>
  movie-list works!
</p>

<div class="card">
  <ul>
    <li *ngFor="let movie of movies">
      <h2>{{movie.Title}}</h2>
      <h3>{{movie.Plot}}</h3>
    </li>
  </ul>
</div>

И это то, что я получаю ... см. Рисунокниже.

enter image description here

Что я могу сделать, чтобы увидеть заголовок и график из базы данных ??

Спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы не добавили извлеченные данные в свой массив фильмов.

movies = [
{Title: 'Harry Potter'},
{Title: 'Space Jam'}]

Вот почему вы не видите нужные данные.

Редактировать: Вы можете попробовать и сделатьthis:

    let movies = [];

    function doFetch() {
        fetch('http://www.omdbapi.com/?i=tt3896198&apikey=9fa6058b', {
            method: "get"
        }).then(function (response) {
            return response.text();
        }).then(function (text) {
            let json = JSON.parse(text);
            let data = { Title: json.Title, Plot: json.Plot }
            movies.push(data);
        });
    }

    doFetch();

Таким образом, вы будете заполнять ваш массив данными для последующего отображения.

0 голосов
/ 29 января 2019

Я думаю response.json() должно идти с fetch

getData() {
  return fetch('http://www.omdbapi.com/?i=tt3896198&apikey=9fa6058b')
    .then((response) => {
      response.json()
    });
}

this.data.getData().then((data) => {
  this.data = data;
});

Также ответом является объект, поэтому вам нужно поместить объект в массив, чтобы использовать *ngFor

DEMO

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