Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:尝试区分';[对象对象]';。只允许使用数组和iterables_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 角度:尝试区分';[对象对象]';。只允许使用数组和iterables

Javascript 角度:尝试区分';[对象对象]';。只允许使用数组和iterables,javascript,angular,typescript,Javascript,Angular,Typescript,我有 尝试区分“[object]”时出错。只允许使用数组和iterables 当我试图获取更新的数据时出现此错误 获取代码: 这是我写的更新代码: 此请求来自Service.ts 这是相同的更新代码:当我在更新代码中写入data=>console.log(data)时,不再显示错误,但当我使用data=>{console.log(data);this.allData(data)}时,我得到了这个错误: HTML:绑定数据的位置: 所以简而言之,我在更新任务和获取更新任务时出错,但我对post


我有 尝试区分“[object]”时出错。只允许使用数组和iterables 当我试图获取更新的数据时出现此错误

获取代码: 这是我写的更新代码: 此请求来自Service.ts 这是相同的更新代码:当我在更新代码中写入
data=>console.log(data)
时,不再显示错误,但当我使用
data=>{console.log(data);this.allData(data)}
时,我得到了这个错误:

HTML:绑定数据的位置:
所以简而言之,我在更新任务和获取更新任务时出错,但我对post put其他数据使用相同的方法,我得到了完美的结果

请有人帮助我,我正在尝试解决此错误,因为很长时间…

尝试初始化所有数据:
this.allDatas=[]

updateTodo(currentTodo){  
          // console.log(currentTodo)
            this._todo.updateTask(currentTodo).subscribe(
              data=>{
               this.allDatas=[]
               console.log(data);
               this.allDatas.push(data)
}

            )
      }

但最好的解决方案是将API的返回类型更改为数组[]

根据我从代码中了解到的情况,您会得到错误,因为您在
allData
方法中将对象分配给数组

在PUT请求的订阅中,您收到的是一个对象而不是数组

这就是
allData
方法的外观:

allData(data) {
 this.allDatas.push(data);
}

此错误与html文件中的
*ngFor
循环有关。 它基本上说,
alldata
不是一个数组

使用“typeof”验证
allDatas
的类型,确保它是一个数组

编辑
我看到了第二个图像,它看起来像是一个数组。
请尝试使用在线验证工具验证该阵列。。在谷歌搜索json验证程序

同时将
*ngFor
循环从
移动到

祝你好运

试试这个
如果您使用this.allDatas=data;allDatas刷新且“allDatas”等于“data”。
如果使用此.allDatas.push(数据);新添加到“所有数据”中的“数据”

首先创建一个数组allDatas:array=[]

allDatas:Array=[];
updateTodo(currentTodo){
//console.log(当前TODO)
此._todo.updateTask(currentTodo.subscribe)(
数据=>{
控制台日志(数据);
this.allDatas=数据;
});

}
您需要显示使用
this.alldata
变量的模板。看起来API正在返回一个对象,您可能正试图使用
*ngFor
指令对其进行循环。这是否回答了您的问题?我认为不存在数组或对象的问题,因为在post方法中我使用了相同的方法,它的工作类型的数据不是数组??我在控制台中看到的是一个示例对象我添加HTML代码我将日期绑定为不同的,因为格式问题我也通过删除日期进行检查,但它显示了相同的错误它是数组类型我还附加了图像它是数组类型请检查并告诉我我是否使用了错误。push方法但它每次都推送新数据,它是更新api嘿,我运行你的代码但它并没有更新我的记录,它只是重复推送值,当我刷新它时,用所有推送值和原始记录删除该值。PUT请求(更新)在请求体中返回一个JSON对象,而不是数组。该对象是您更新的待办事项。我假设您得到了上面提到的行为,因为您使用了
allData
方法来获取所有TODO。如果是这种情况,您应该保持该方法的现有状态,并且在订阅更新请求时,您应该拥有
this.allDatas.push(data)
(在本例中,数据是对象)。如果不起作用,创建一个stackblitz复制你的代码。我再次这样做你想说什么我完全理解让我给你看代码和输出在这里你发现代码和输出的2个图像,所以当我点击更新它推新任务,每次当我刷新页面时,所有推送的数据都消失了,因为它的更新在变量中不在实际数据库(JSON文件)。嗯,在我看来,您并没有像应该的那样从服务器获取数据。你能发布你如何从服务器上检索整个TODO的代码吗?当您更新todo时,是否从服务器收到任何错误?你还应该检查你的网络标签,看看更新后请求是否给你200个状态码。我使用.push方法,但每次都会推送新数据,这是一个更新api。。。Check service.ts its put apii在itOkay中推送数据之前更新列表中的答案我尝试过这个方法,但它推送新数据,而不是执行推送(更新)方法[您的输出](当我刷新时,所有推送的项目都消失了,并且还删除了我用来更新的记录我认为错误[对象]现在已经解决了,您仍然需要找出数据不符合预期的原因嘿,我尝试了这段代码,但代码中出现了错误,然后我编辑了您的代码,最后我添加了[](括号)但是当我单击“更新任务”时仍然无法正常工作,它会从中删除所有记录,因此错误的是我们没有创建数组…请像这样添加数组allDatas:array=[];
updateTask(todo:TodoModel):Observable<TodoModel>{
    return this._http.put<TodoModel>('http://127.0.0.1:3000/todo/updateTodo/'+todo.id,todo,headerOption)
  }
updateTodo(currentTodo){  
           // console.log(currentTodo)
            this._todo.updateTask(currentTodo).subscribe(
              data=>{console.log(data);this.allData(data)}, //Error Comes from this line----------
              error=>console.log(error)
            )
      }
<tbody *ngFor="let t of allDatas;let i= index">
                <tr class="table-success" *ngIf="t && t.complited">
                    <td>{{t.task}}</td>
                    <td>{{t.date.year+"-"+t.date.month+"-"+t.date.day}}</td>
                    <td> {{t.complited}}</td>
                    <td>
                        <i class="fa fa-times-circle btn idelete" style="font-size:25px;" (click)="putTrue(t)"></i>
                        <i class="fa fa-edit btn iedit" style="font-size:25px;color:rgb(31, 12, 12)" (click)="editTodo(t)"></i>
                        <i class="fa fa-trash-o btn idelete" style="font-size:25px;" (click)="deleteTask(t.id)"></i>
                    </td>
                </tr>
                <tr class="table-danger" *ngIf="t && !t.complited">
                    <td>{{t.task}}</td>
                    <td>{{t.date.year+"-"+t.date.month+"-"+t.date.day}}</td>
                    <td> {{t.complited}}</td>
                    <td>
                        <i class="fa fa-check-circle btn idone" style="font-size:25px;" (click)="putTrue(t)"></i>
                        <i class="fa fa-edit btn iedit" style="font-size:25px;color:rgb(31, 12, 12)" (click)="editTodo(t)"></i>
                        <i class="fa fa-trash-o btn idelete" style="font-size:25px;" (click)="deleteTask(t.id)"></i>
                    </td>
                </tr>
            </tbody>
[{"id":29,"task":"random 5","date":{"year":2020,"month":5,"day":9},"category":"genral","complited":false},null,{"id":31,"task":"task 32","date":{"year":2020,"month":5,"day":31},"category":"genral","complited":false}]
updateTodo(currentTodo){  
          // console.log(currentTodo)
            this._todo.updateTask(currentTodo).subscribe(
              data=>{
               this.allDatas=[]
               console.log(data);
               this.allDatas.push(data)
}

            )
      }
allData(data) {
 this.allDatas.push(data);
}