AlexanderBelov
@AlexanderBelov
Frontend developer

Как получить json данные в Angular2 приложении?

Есть на локале отдельный json файл типа:
[
    {
      "name": "Release One",
      "source": { "pointer": "/data/attributes/first-name" },
      "songs":  "Release One Songs",
      "year": "2010"
    },
    {
      "name": "Release Two",
      "source": { "pointer": "/data/attributes/first-name" },
      "songs":  "Release Two Songs",
      "year": "2011"
    },
    {
      "name": "Release Three",
      "source": { "pointer": "/data/attributes/first-name" },
      "songs":  "Release Three Songs",
      "year": "2014"
    }
  ]


Каким образом данные загрузить во view приложения Angular2?
Перепробовал кучу тюториалов, что-то устарело и не работает, что-то просто вызывает ошибки из-за того, что стартовый проект построен по-разному.

releases.service.ts
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/Rx';
import 'rxjs/add/operator/map';

@Injectable()
export class ReleasesService {
	constructor(private http: Http){

	}

	getReleases(){
		return this.http.request('./releases/releases.json')
		.map(res => res.json());
	}

	getData(res: Response){

	}
}


releases.component.html
<div class="releases-component">
	Releases Component starts here!
	<div *ngFor="let release of releases">
		<h3>Name: {{release.name}}</h3>
		<h3>Name: {{release.year}}</h3>
	</div>
</div>


Во view ничего не отображается. В инспекторе вместо ожидаемых объектов:
<!--template bindings={
  "ng-reflect-ng-for-of": null
}-->


releases.component.ts
import { Component, OnInit } from '@angular/core';
import { ReleasesService } from './releases.service';

@Component({
	selector: 'releases',
	templateUrl: './releases.component.html',
	styleUrls: ['./releases.component.scss']
})
export class ReleasesComponent implements OnInit { 
	constructor(){

	}

	ngOnInit(){

	}
}
  • Вопрос задан
  • 2321 просмотр
Решения вопроса 2
Вариант 1 - получаем Observable и используем AsyncPipe, который сделает всю грязную работу за нас

html
*ngFor="let release of releases | async"

component
releases: Observable<any[]>;

constructor(private releasesService: ReleasesService) {}

ngOnInit() {
  this.releases = this.releasesService.getReleases();
}


Вариант 2 - сами подписываемся

releases: any[];

constructor(private releasesService: ReleasesService) {}

ngOnInit() {
  this.releasesService.getReleases()
     .subscribe(data => this.releases = data);
}
Ответ написан
AlexanderBelov
@AlexanderBelov Автор вопроса
Frontend developer
Мб кому-то пригодится, проблема была в json файле, расположенном на localhost. Через удалённый запрос всё сработало. Всем спасибо!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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