Javascript 异常:Error:Uncaught(承诺中):TypeError:cannotreadproperty';0';有什么建议吗?
自从我开始学习angular2,我就面临着这个问题。 新闻服务Javascript 异常:Error:Uncaught(承诺中):TypeError:cannotreadproperty';0';有什么建议吗?,javascript,angular,typescript,Javascript,Angular,Typescript,自从我开始学习angular2,我就面临着这个问题。 新闻服务 @Injectable() export class NewsServices { private news: News[] = []; constructor(private _http: Http) {} getSingleNews(id: string): Observable <SingleNews[]> { return this._http.get(
@Injectable()
export class NewsServices {
private news: News[] = [];
constructor(private _http: Http) {}
getSingleNews(id: string): Observable <SingleNews[]> {
return this._http.get(`http://watania.info/getNewsById/${id}`)
.map((response: Response) => response.json());
}
export interface SpecialNews {
id: string;
title: string;
url_title: string;
image: string;
category: string;
summary: string;
date_to_publish: string;
}
问题是,当我尝试使用上述任何服务时,在我的任何组件(如新闻组件)中,我在ngOnInit中的console.log(this.relatedNews[0])控制台中没有定义,但在Ngondestory中的console.log(this.relatedNews[0])我得到了数组。此外,我可以在模板中使用相同的变量
<h1 class="news-header"><span></span> {{selectednews[0]?.title}}</h1>
是一个异步操作。您需要使用回调(subscribe
)中的relatedNews
执行以下操作:
this._newsService.getRelatedNews(id).subscribe(
(relatedNews) => {
this.relatedNews = relatedNews;
console.log(this.relatedNews[0]);
});
将您的console.log(this.relatedNews[0])放入服务的回调中,如下所示:
this._newsService.getRelatedNews(id).subscribe(
relatedNews => this.relatedNews = relatedNews);
console.log(this.relatedNews[0])
});
通常你的console.log会返回你的对象我试过了,同样的情况也会发生。我没有定义。让我沮丧的是,为什么它在ngDestroy和模板中给了我正确的结果,而不是在ngOnInit@MohammedSabbah我不认为你做了同样的事。它在
ngondestory
中显示日志的原因是,在ngondestory
中,this.relatedNews
变量有足够的时间进行定义。我之前在我的答案中打了一个字,你可以像更新的一样尝试一下。现在它工作得很好,非常感谢。所以,现在,在相关新闻上,我需要做同样的事情吗?例如,如果我需要像这样使用它,则为this.metaService.setTitle('News page'+this.relatednews[0].name);我需要像console.log一样插入它吗?@mohammedsabah是的,因为getRelatedNews
是异步的,这意味着它会在一段时间后发生。在订阅函数内部的一段时间后。查看此答案,以更深入地了解异步函数的工作原理:非常感谢您为我节省了时间:)
this._newsService.getRelatedNews(id).subscribe(
relatedNews => this.relatedNews = relatedNews);
});
this._newsService.getRelatedNews(id).subscribe(
(relatedNews) => {
this.relatedNews = relatedNews;
console.log(this.relatedNews[0]);
});
this._newsService.getRelatedNews(id).subscribe(
relatedNews => this.relatedNews = relatedNews);
console.log(this.relatedNews[0])
});