角度cdk拖放-是否有任何方法可以在拖放时异步验证并在验证返回false时还原?

时间:2019-07-17 15:01:46

标签: angular angular-cdk angular-dragdrop

放下一个项目时,我希望能够执行返回true或false的异步调用(例如,与后端检查是否存在冲突,冲突等)。如果为false,我想“反转”该放置,以便该项目出现在原始数组中。

我在官方文档中找不到任何引用,因此希望对如何解决这一挑战提供任何指导。

2 个答案:

答案 0 :(得分:1)

对于其他需要此方法的人,这是一种方法。如果能以某种方式告诉该动作在还原之前等待结果,那将是很好的选择,但是我不知道该怎么做。

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);
    }

  });

}

答案 1 :(得分:0)

按照@Jim提出的想法,可能的解决方案可以简单地进行更改并异步检查操作的状态(如果可以):完成,否则还原更改,以下解决方案也可以使用{{ 1}}

changeDetection: ChangeDetectionStrategy.OnPush