Во-первых, я знаю, что я должен использовать сервис для этого и планирую, но я не смог получить данные в службе, поэтому я построил его в своем компонент. Я не могу получить доступ к переменной «photos» из html-шаблона. Ниже приведена ошибка.Невозможно получить доступ к переменной, объявленной в классе из шаблона HTML Angular 2
import { Component } from '@angular/core';
import {HTTP_PROVIDERS} from '@angular/http';
import {PhotosComponentComponent} from './photos-component/photos- component.component';
import {PhotosServiceService} from './photos-component/photos- service.service';
// import {photos} from './photos-component/photo';
import {Observable} from 'rxjs/Rx';
import {Http, Response} from '@angular/http';
@Component({
moduleId: module.id,
selector: 'ang2demo-app',
templateUrl: 'ang2demo.component.html',
styleUrls: ['ang2demo.component.css'],
providers: [PhotosServiceService, HTTP_PROVIDERS]
})
export class Ang2demoAppComponent {
title = 'ang2demo works!';
constructor(private http: Http) {}
private photosUrl = 'https://jsonplaceholder.typicode.com/photos';
getPhotos(){
this.http.get(this.photosUrl)
.map((res:Response, data) => res.json())
.subscribe(
data => {
let photos = data;
console.log(photos);
return photos; //Now this variable 'photos' contains all of my data from the http.get request. But, I cannot access it from the template - Below
}
)
}
ngOnInit() {
this.getPhotos()
}
}
Вот мой код шаблона, который служил в templateUrl
<div ngIf *ngFor="let photo of photos">{{photo.url}}</div>
Я получаю сообщение об ошибке, что «не может прочитать URL-адрес свойство не определено.» Почему у меня нет доступа к переменной фотографий из шаблона html?
Вы указали тип переменной, но не инициализировали ее. Таким образом, он не определен, пока вы не придадите ему значение. Ваш код выглядит хорошо для меня. Http-вызов - асинхронный, поэтому фотографии будут заполнены, когда ответ будет возвращен с сервера. Является ли он еще неопределенным после присвоения значений в функции подписки? – Sefa
Если вы введете «https://jsonplaceholder.typicode.com/photos» в свой браузер, верните ли вы результат json? – KwintenP
Возможно, это потому, что у вас есть 'this.photos' type .. И вы назначаете 'data', который не является' photos [] 'type. –
Poonam