node.js - NgFor 仅支持绑定到诸如 Arrays 之类的 Iterables。找不到不同的支持对象
问题描述
我在网站上遇到了很多关于同一问题的链接。但我无法解决。我很抱歉再次问这种类型的问题。
在我的项目中,我想遍历任务并显示它。我正在从后端获取这些任务。我可以通过控制台查看任务,但无法在网页中查看,因为它给出了错误。我尝试在 ngFor 中使用 'keyvalue',但是当我不使用任何东西时,没有显示。
任务服务.ts
get_tasks():Observable<Task>{
return this.http.get<Task>('http://localhost:3000/tasks/');
}
createTask(task:Task){
console.log(task);
return this.http.post('http://localhost:3000/tasks/',task);
}
deleteTask(id){
return this.http.delete('http://localhost:3000/tasks/'+id);
}
updateTask(task){
return this.http.put('http://localhost:3000/tasks/'+task.id,task).pipe(map(res=>{
console.log(res);
}));
}
任务.component.ts
ngOnInit(){
this.getTasksList();
}
getTasksList(){
this.taskService.get_tasks().subscribe((task:any)=>{
this.tasksList=task;
console.log(this.tasksList);
})
}
newTasks(event){
event.preventDefault();
var newList={
_id:this.id,
title:this.title,
isDone:false
}
this.taskService.createTask(newList).subscribe((task:any)=>{
this.tasksList.push(task);
this.title='';
})
}
removeTask(id){
var tasks=this.tasksList;
this.taskService.deleteTask(id).subscribe((data)=>{
for(var i=0;i<tasks.length;i++){
if(tasks[i]._id=id){
tasks.splice(i,1);
}
}
})
}
task.component.html
<div class="tasks">
<div class="tasks-list" *ngFor="let task of tasksList">
<div class="col-md-1">
<input type="checkbox">
</div>
<div class="col-md-7">
{{task.title }}
</div>
解决方案
看起来后端正在返回一个对象,该对象的数组包含在名为 的属性中data
。
选项 1:您可以在控制器中分配它而不更改模板
控制器
getTasksList(){
this.taskService.get_tasks().subscribe((task:any) => {
this.tasksList = task['data'];
console.log(this.tasksList);
});
}
模板
<div class="tasks">
<div class="tasks-list" *ngFor="let task of tasksList">
<div class="col-md-1">
<input type="checkbox">
</div>
<div class="col-md-7">
{{ task?.title }}
</div>
</div>
</div>
选项2:或不更改控制器并访问模板中的属性
getTasksList(){
this.taskService.get_tasks().subscribe((task:any) => {
this.tasksList = task;
console.log(this.tasksList);
});
}
模板
<div class="tasks">
<div class="tasks-list" *ngFor="let task of tasksList?.data">
<div class="col-md-1">
<input type="checkbox">
</div>
<div class="col-md-7">
{{ task?.title }}
</div>
</div>
</div>
选项3:或者如果您可以调整后端,请保持前端代码不变并调整后端以返回数组[{}, {},...]
而不是对象{data: [{}, {},...]}
。
推荐阅读
- bash - 无法在 Mac 上安装 Delve Go 调试器
- flutter - 推荐的数据流(导入/导出)
- android - 颤动中的底部导航栏颜色恢复为黑色
- node.js - 如何在 Docker 中将 NATS 服务器连接到 NodeJS 应用程序
- python - sklearn 混淆矩阵在错误的位置显示错误的尺寸/刻度线
- webpack - 作为 Webpack 构建中的步骤之一,如何将文件从一个位置复制到另一个位置?
- javascript - 保存在本地存储附加复选框状态
- pytorch - 使用 pytorch 进行回归的卷积神经网络
- netlogo - NetLogo 战斗模拟:在特定坐标之间放置士兵?
- python - 在 Pandas 中按布尔条件过滤 CSV