我正在研究 Angular 8。
我有一个显示表格的页面。taskList
该表显示来自组件获取的对象数组的数据@Input()
。
我对该表的列有排序功能。
我在每一行上还有一个删除选项。当我单击删除选项时,它会调用 api 来删除该行,然后再次调用来获取数组tasklist
。这是同样的效果
@Effect()
DeleteTask$: Observable<Action> = this.actions$.pipe(
ofType(importActions.DELETE_TASK),
switchMap(params =>
this.globalService
.deleteTask(params)
.mergeMap(deleteSuccess => {
return from([
new importActions.DeleteTaskSuccess(deleteSuccess),
new importActions.LoadTaskList(),
]);
})
.catch((error, caught) => {
return Observable.of(new GlobalError(error));
}),
),
);
我的问题是,当我加载第一页时,排序功能工作正常。但是,如果我删除一行然后获取删除后的任务列表,则会收到以下错误:
ERROR Error: Uncaught (in promise): TypeError: Cannot assign to read only property '0' of object '[object Array]'
TypeError: Cannot assign to read only property '0' of object '[object Array]'
根据错误消息,我的代码中的以下函数给出了错误
exchange(a, b) {
const temp = this.taskList[a];
this.taskList[a] = this.taskList[b]; //this line gives error
this.taskList[b] = temp;
}
该函数是使用数组并对其进行排序的排序代码的一部分tasklist。
流量为ngOnchanges(detects change is taskList array) calls --> this.taskChange('export_name', 'asc') based on some condition calls --> this. exchange(a, b)
以下是我的 ngOnchanges 方法
ngOnChanges(changes: SimpleChanges) {
if (this.taskList !== null && this.taskList !== undefined) {
this.taskChange('export_name', 'asc');
}
}
以下是主要的排序方法
async taskChange(value, taskOrder) {
this.sortOrder = taskOrder;
this.selectedValue = value;
const expr = {
asc: (a, b) => a > b,
desc: (a, b) => a < b,
};
我不确定当数组第二次更改时到底是什么导致了此错误。我尝试了很多方法,但没有一个有效。根据我在网上发现的情况,这可能会发生,因为我正在尝试改变作为 @Input 接收的数组。但上面的代码会改变“tasklist”数组,但它会在初始页面加载时起作用。并且仅在数组更改时停止工作。有人可以帮我吗?
互换的青春
缥缈止盈
喵喵时光机
相关分类