2016-09-05 23 views
5

Tôi đang cố gắng để lấy dữ liệu từ một tập tin JSON sau http tutorial từ tài liệu Angular2:Lấy dữ liệu từ JSON với Angular2 Promise

dịch vụ:

import { Injectable } from '@angular/core'; 
import { Headers, Http } from '@angular/http'; 
import 'rxjs/add/operator/toPromise'; 
import { Hero } from './hero'; 

private heroesUrl = 'app/heroes'; // URL to web api 

constructor(private http: Http) { } 

getHeroes(): Promise<Hero[]> { 
    return this.http.get(this.heroesUrl) 
     .toPromise() 
     .then(response => response.json().data as Hero[]) 
     .catch(this.handleError); 
} 

Component:

import { Component, OnInit } from '@angular/core'; 
import { Hero } from './hero'; 
import { HeroService } from './hero.service'; 

@Component({ 
    selector: 'my-app', 
    template: // some template, 
    styles: // some style, 
    providers: [HeroService] 
}) 

export class AppComponent implements OnInit { 
    title = 'Tour of Heroes'; 
    heroes: Hero[]; 

    constructor(private heroService: HeroService) { } 

    getHeroes(): void { 
    this.heroService.getHeroes().then(heroes => { 
     this.heroes = heroes; 
     console.log('heroes', this.heroes); 
    }); 
    } 

    ngOnInit(): void { 
    this.getHeroes(); 
    } 
} 

Mô hình:

export class Hero { 
    constructor(
    public id: number, 
    public name: string, 
    public power: string, 
    public alterEgo?: string 
) { } 
} 

tôi thay private heroesUrl = 'app/heroes'; với thiết bị đầu cuối của tôi đó là một tập tin JSON (private heroesUrl = 'app/mockups/heroes.json';), có chứa dữ liệu theo mô hình hero.

Nhưng khi tôi chạy ứng dụng, tôi không nhận được dữ liệu và có bất kỳ thông báo lỗi nào. Mã của tôi có đúng không?

+0

Bạn không nhận dữ liệu ở đâu? Bạn có thể vui lòng thêm một 'console.log (dữ liệu);' vào mã trong câu hỏi của bạn nơi bạn mong đợi 'dữ liệu' (hoặc bất kỳ tên nào) mà bạn mong đợi để có một giá trị? –

+0

Tôi có thể thêm 'console.log (dữ liệu)' ở đâu? – smartmouse

+0

Tôi không hiểu câu hỏi. Bạn mong đợi biến nào có giá trị ở đâu? Để gỡ lỗi nó, bạn có thể thêm một dòng 'console.log (...)'. Điều này cho phép bạn tự điều tra và cho phép chúng tôi thấy những gì bạn mong đợi. Tôi không thể trả lời câu hỏi của bạn khi tôi không biết những gì bạn mong đợi sẽ xảy ra. –

Trả lời

2

Giải pháp là đối tượng JSON phải bắt đầu bằng thuộc tính có cùng tên là response.json().data.

Đổi tên thuộc tính đầu tiên thành data thực hiện công việc.

Các vấn đề liên quan