@mr_plutus

Angular2, в чём ошибка при запросе restApi?

Привет всем. Не могу вкурить почему не показывает данные

Пару моментов:
- Сервер отдаёт данные в виде json
- Что нужно перенести в отдельный файл получение данных знаю, пока для тестов всё в component

Код компонента,:
import {Component, OnInit} from '@angular/core';
import {Http, Headers, URLSearchParams, Response} from '@angular/http';
import 'rxjs/Rx';
import {GlobalVariable} from './../../app.config'
import {Observable}     from 'rxjs/Observable';

@Component({
    templateUrl: './template.html',
})


export class RegistriesComponent implements OnInit{
    errorMessage: string;
    data:Array<any>;

    constructor(private http: Http) {}
    private urlApi = GlobalVariable.BASE_API_URL;

    ngOnInit() {
        this.getHeroes()
            .subscribe(
                res => this.data = res,
                error =>  this.errorMessage = <any>error,
            )
    }

    getHeroes (): Observable<Array<any>> {
        return this.http.get(this.urlApi + 'rest/nsi/routes')
            .map(this.extractData)
            .catch(this.handleError);
    }

    private extractData(res: Response) {
        let body = res.json();
        return body.data || { };
    }

    private handleError (error: any) {
        let errMsg = (error.message) ? error.message :
            error.status ? `${error.status} - ${error.statusText}` : 'Server error';
        console.error(errMsg);
        return Observable.throw(errMsg);
    }
}


Вывод в шаблоне:
<tr *ngFor="let item of data">
     <td>{{item.number}}</td>
</tr>
  • Вопрос задан
  • 283 просмотра
Пригласить эксперта
Ответы на вопрос 3
Покажите данные, что с сервера приходят.

В ответе точно есть поле "data"? Это точно массив объектов, содержащих поле "number". Если так, то почему вместо массива из метода extractData() возвращается объект, а не массив? Должно быть, наверное, так:
private extractData(res: Response): Array<{"number": any}> {
  return res.json().data || [];
}
Ответ написан
@mr_plutus Автор вопроса
Потестировал на плункере работает... Куда копать даже не знаю...

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

import 'rxjs/Rx';

@Component({
    templateUrl: 'template.html',
    providers: [ HeroService ]
})
export class RegistriesComponent implements OnInit {
    errorMessage: string;
    public data: Array<any> = [
        {'name':'test1'}
    ]
    constructor (private heroService: HeroService) {}

    ngOnInit() {
        this.data = [
            {'name':'test2'}
        ]
        this.getHeroes()
    }

    getHeroes() {
        console.log(this.heroService.getHeroes().subscribe(
            data => this.data = data,
            error =>  this.errorMessage = <any>error))
    }

}


В консоли от субскрайбера мишет:
Subscriber {closed: false, syncErrorValue: null, syncErrorThrown: false, syncErrorThrowable: false, isStopped: false…}


Выводить естессно test2, на плункере всё ок данные выводит с сервера
Ответ написан
Комментировать
nuclear_kote
@nuclear_kote
Просто на будущее. Как по мне для рестов лучше юзать ng2-resource-rest (аналог ngResource из 1го ангулара)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы