Я пытаюсь получить данные из веб-сервиса (результат JSON) и отобразить его в компоненте Angular 2 с помощью *ngFor
. Вот мои Datas:Http get + NgFor
{
"Columns": [
{"Label": "CodeProduct"},
{"Label": "productfamily_ID"},
{"Label": "description"}
]
}
А вот мой Угловой компонент:
import {Component, View} from 'angular2/core';
import {Http, Response} from 'angular2/http';
import 'rxjs/add/operator/map';
@Component({
selector: 'app',
templateUrl: './app/app.html'
})
export class AppComponent
{
columns: Array<Object> = [];
constructor(private http: Http){}
ngOnInit() {
this.getProducts()
.subscribe(
(columnRemote: Array<Object>) => { this.columns = columnRemote});
};
private _url = 'api/data/product';
getProducts() {
return this.http.get(this._url)
.map((res) => res.json().Columns);
}
}
И мой шаблон:
<h3>Hello StackOverFlow</h3>
<ul>
<li *ngFor="#column of columns">{{column.Label}}</li>
</ul>
Я вижу, что появляется название, но не список мои столбцы (даже если я попробую статическую строку, например «Тест» внутри <li>
). Если я заполню свой массив статическими значениями в конструкторе, я увижу, как отображается массив. В Debuger я могу видеть, что Datas правильно восстановлена, но в этой строке:
.subscribe((columnRemote: Array<Object>) => { this.columns = columnRemote});
переменная это имеет тип Абонента и не типа AppComponent. Это нормально? Я сделал это неправильно? Я работаю с Angular2 beta6 с ES5 TypeScript.
EDIT 1: Вот что Debuger показать мне для res.json()
Из приведенного выше кода, я думаю, что вы получаете объект, но вы рассматриваете как array.try '
Я рассматриваю как массив, потому что я возвращаю массив столбцов в функции .map: '.map ((res) => res.json(). Columns);' –
получил проблемы bro..working on it –