角度 CDK 拖放 - 有没有办法在放置时异步验证并在验证返回 false 时恢复?



当删除一个项目时,我希望能够执行一个异步调用(例如,与后端检查冲突、冲突等...),返回真或假。如果为 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();
});

最新更新