Вы можете использовать Angular Материал enterPredicate
из CdkDropList
( Документы )
@ Input ('cdkDropListEnterPredicate')
enterPredicate : (drag: CdkDrag, drop: CdkDropList) => логическое значение
Функция, используемая для определения, разрешено ли перемещение элемента в контейнер для отбрасывания.
Например:
html:
<div
cdkDropList
[cdkDropListData]="basket"
class="example-list"
(cdkDropListDropped)="drop($event)"
[cdkDropListEnterPredicate]="canDrop">
<div class="example-box" *ngFor="let item of basket" cdkDrag>{{item}}</div>
</div>
компонент:
canDrop() {
return this.basket && this.basket.length > 0;
}
Проверить прикрепленный Stackblitz .
Редактировать 1 :
Дополнительно вы можете использовать прикрепленный список, где вы также сбросили:
canDrop(item: CdkDrag, list: CdkDropList) {
console.log(list.getSortedItems().length)
return list && list.getSortedItems().length && list.getSortedItems().length > 0;
}
Редактировать 2:
Вы можете перезаписать функция для передачи параметра:
...
[cdkDropListEnterPredicate]="dropListEnterPredicate(basket)">
...
dropListEnterPredicate(list: []){
return function(drag: CdkDrag, drop: CdkDropList) {
return list.length > 0;
};