当删除一个项目时,我希望能够执行一个异步调用(例如,与后端检查冲突、冲突等...),返回真或假。如果为 false,我想"反转"下降,以便该项目出现在原始数组中。
我在官方文档中找不到任何参考资料,因此非常感谢有关如何应对这一挑战的任何指示。
对于其他任何寻找这个的人来说,这里有一种方法可以做到这一点。如果可以以某种方式告诉移动在恢复之前等待结果,那就太好了,但我不知道该怎么做。
try{
//Move the value first
transferArrayItem(event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
//Wait for the result and then roll back the change if required
this.openEdit(event.previousContainer.data[event.previousIndex]).subscribe((result:Updated) =>
{
if(result?.success !== 1){
transferArrayItem(event.container.data,
event.previousContainer.data,
event.currentIndex,
event.previousIndex);
}
});
}
按照@Jim提出的想法,一个可能的解决方案可以简单地进行更改并异步检查操作的状态,如果可以:完成,否则还原更改,以下解决方案也将使用changeDetection: ChangeDetectionStrategy.OnPush
transferArrayItem(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex);
this.service.asyncItem(itemToUpdate).toPromise().catch(() => {
transferArrayItem(
event.container.data,
event.previousContainer.data,
event.currentIndex,
event.previousIndex);
this.cdr.detectChanges();
});