angular - 尝试区分“[object Object]”时出错。只允许使用数组和可迭代对象。如何显示json响应
问题描述
我正在尝试显示 JSON 响应,但出现此错误:core.js:6185 ERROR 错误:尝试区分“[object Object]”时出错。只允许使用数组和可迭代对象。
我该如何解决这个问题?如何将其转换为数组?
TS
export interface Book {
id: number,
book_name: string,
book_issue: Date,
}
服务.ts
export class BookApiService {
private bookUrl = "http://127.0.0.1:5000/books"
httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}
constructor (private http: HttpClient){}
getBook(): Observable<Book[]> {
return this.http.get<Book[]>(this.bookUrl ,this.httpOptions)
.pipe(
catchError(this.errorHandler)
)
}
errorHandler(error) {
let errorMessage = '';
if(error.error instanceof ErrorEvent) {
errorMessage = error.error.message;
} else {
errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
}
return throwError(errorMessage);
}
模板
<ul *ngFor="let book of books">
<li>{{book.book_name}}</li>
</ul>
零件
export class AppComponent implements OnInit {
title = 'app';
books: Book[] = [];
constructor(public rs : BookApiService){}
ngOnInit(): void {
this.rs.getBook().subscribe((data: Book[])=>{
this.books = data;
console.log(this.books);
})
}
后端 API 响应:
{"books":[{"book_issue":"Fri, 13 Mar 2020","book_name":"Book1","id":1},
{"book_issue":"Fri, 13 Mar","book_name":"Book2", "id":2}],
"success":true}
这是控制台日志: 控制台日志
解决方案
更新您的代码如下:
<ul *ngFor="let book of books?.books">
<li>{{book.book_name}}</li>
</ul>
从您的 API 返回的响应是 anobject
并且您将其分配给 in 中使用的变量,该变量ngFor
需要一个数组。所以它的抛出错误。
解决此问题的另一种方法是将变量分配如下:
this.rs.getBook().subscribe((data: any)=>{
this.books = data.books;
console.log(this.books);
})
然后在您的html
使用中如下所示:
<ul *ngFor="let book of books">
<li>{{book.book_name}}</li>
</ul>
推荐阅读
- python - GridSearchCV 中的 best_score_ 和 r2_score() 之间的区别
- html - 如何通过将鼠标悬停在按钮上来更改图像的 src?
- google-cloud-platform - 在 BigQuery 中看不到 GA 实时数据表
- react-native - 我正在使用 react-native-swiper-flatlist ,但我的图像没有显示我不知道错误
- sql - sqlite3 具有空值的复合唯一约束
- python - 获取火车数据生成器并保存它们
- javascript - 使用 Google Apps 脚本的库存提醒
- excel - 如何删除 Excel 中单词之间不需要的逗号和连字符?
- php - 当我在安装 Magento 后尝试访问项目时,我得到了这个。试过很多方法还是没解决
- css - 为什么我们检查元素时看不到标题标签的文件名