Angular 如何使用cdkDropListEnterPredicate检查多个条件?

Angular 如何使用cdkDropListEnterPredicate检查多个条件?,angular,drag-and-drop,angular-material,angular-cdk,Angular,Drag And Drop,Angular Material,Angular Cdk,我有多个可拖动列表连接到多个拖放区域,但需要根据应用程序中已设置的变量限制哪些项目可以拖动。例如,如果我有以下内容: this.maxVirtuePts = 10; this.reqSocialStatus = false; this.allowedTheGift = true; this.maxHermeticMajorVirtue = 1; 对于maxVirtuePts,如何将放置区域中的项目数量限制为10? 对于reqSocialStatus,如何检查删除的区域中是否至少存在一个项? 对

我有多个可拖动列表连接到多个拖放区域,但需要根据应用程序中已设置的变量限制哪些项目可以拖动。例如,如果我有以下内容:

this.maxVirtuePts = 10;
this.reqSocialStatus = false;
this.allowedTheGift = true;
this.maxHermeticMajorVirtue = 1;
对于maxVirtuePts,如何将放置区域中的项目数量限制为10? 对于reqSocialStatus,如何检查删除的区域中是否至少存在一个项? 对于allowedTheGift,我如何检查已删除项目的名称是否包含特定文本? 对于MaxHermiticMajorDexture,如何检查特定列表中已删除的项目是否已存在,以避免添加来自同一原始列表的其他项目

如果有人能建议或提供如何有效使用CDKDropListInterpredicate的示例,我们将不胜感激


添加了一个StackBlitz:

在您的drop功能中,您可以检查您想要的任何条件,如果条件不满足,只需调用return,这将停止将项目放入区域

比如说

drop(event: CdkDragDrop<string[]>) {
    if(event.container.data.length>9){
     return // this will stop item from drop
    }
    if (event.previousContainer === event.container) {
      moveItemInArray(
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    } else {
      transferArrayItem(
        event.previousContainer.data,
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    }
  }
drop(事件:CdkDragDrop){
if(event.container.data.length>9){
return//这将停止删除项目
}
if(event.previousContainer==event.container){
moveItemInArray(
event.container.data,
event.previousIndex,
event.currentIndex
);
}否则{
转让协议(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}

在drop功能中,如果条件不满足,您可以检查任何条件,只需调用return即可。这将停止将项目放入区域

比如说

drop(event: CdkDragDrop<string[]>) {
    if(event.container.data.length>9){
     return // this will stop item from drop
    }
    if (event.previousContainer === event.container) {
      moveItemInArray(
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    } else {
      transferArrayItem(
        event.previousContainer.data,
        event.container.data,
        event.previousIndex,
        event.currentIndex
      );
    }
  }
drop(事件:CdkDragDrop){
if(event.container.data.length>9){
return//这将停止删除项目
}
if(event.previousContainer==event.container){
moveItemInArray(
event.container.data,
event.previousIndex,
event.currentIndex
);
}否则{
转让协议(
event.previousContainer.data,
event.container.data,
event.previousIndex,
event.currentIndex
);
}
}

我最终使用了cdkDropListEnterPredicate,但只有最后的检查会阻止进一步传输的项目。为了进行最终检查,我计算了其他条件作为变量。

我最终使用了cdkdroplisterpredicate,但只有最终检查会阻止进一步传输的项目。为了进行最终检查,我将其他条件作为变量进行计算。

如果我有多个条件要处理,那么可以使用整个范围的if语句吗?使用普通if语句和enterpridicate之间的用例是什么?在这个视图的最终版本中,可能有接近15-20个条件在起作用。@DashChilder我不知道Enterprise函数。所以我不确定有什么不同。但是由于我的官方建议,我会建议这样做。如果我有多个条件要处理,那么有一系列的if语句是可以接受的吗?使用普通if语句和enterpridicate之间的用例是什么?在这个视图的最终版本中,可能有接近15-20个条件在起作用。@DashChilder我不知道Enterprise函数。所以我不确定有什么不同。但是由于我的建议,我建议你也这样做。