Я создаю клон Hacker News в Angular с помощью API Hacker News , и я пытаюсь отобразить комментарии, отвечающие на поток в шаблоне.
Мне трудно понять, что возвращает API (несмотря на .json в вызове API!), И не могу понять, как с ним работать.
В моем сервисе у меня есть следующее:
getCommentTree(commentId): Observable<any> {
return this.http
.get(`https://hacker-news.firebaseio.com/v0/item/${commentId}.json`);
}
Компонент:
childCommentDetails: any[] = [];
constructor(private hackerNewsService: HackerNewsService) { }
ngOnInit() {
this.getChildCommentDetail(this.id);
}
getChildCommentDetail(id: number) {
this.hackerNewsService.getCommentTree(id).subscribe(
(data) => {
if (data !== null) {
this.childCommentDetails.push({ data });
}
},
(err) => console.log(`error ${err}`),
() => console.log('done')
);
}
Шаблон:
<div *ngFor="let comment of childCommentDetails">
<p [innerHTML]="comment.text"></p>
</div>
Когдаэто работает, я не вижу никакого вывода в моем шаблоне.
Однако, если я изменю шаблон на использование канала json:
<div *ngFor="let comment of childCommentDetails">
<li>{{ comment | json}} </li>
</div>
Отображается вывод в формате JSON. Поэтому я предполагаю, что API возвращает JSON, и затем я попытался преобразовать его обратно в объект, используя JSON.parse. Мой getChildCommentDetail изменился на:
getChildCommentDetail(id: number) {
this.hackerNewsService.getCommentTree(id).subscribe(
(data) => {
if (data !== null) {
const obj = JSON.parse(data);
this.childCommentDetails.push({ obj });
}
},
(err) => console.log(`error ${err}`),
() => console.log('done')
);
}
Однако, когда я запускаю это, я вижу ошибку:
ОШИБКА SyntaxError: Неожиданный токен o в JSON в позиции 1
Что я делаю не так?