Angular CDK Drag and Drop: отмена перетаскивания

С новой функцией перетаскивания в @ angular / cdk (сейчас я использую версию 7.0.0-beta.2), можно ли отменить перетаскивание?

Я не нашел подходящей функции на «CdkDrag», которая могла бы помочь.

Изменить от 10 января 2019 г.

Спасибо за ответы. Думаю, я не совсем понял: я ищу способ отменить действие перетаскивания, которое уже выполняется. I. e. при перетаскивании элемента я хочу иметь возможность вернуть этот элемент в контейнер, откуда он был (например, нажав клавишу Escape).

Любые идеи?


person Johannes Heucher    schedule 02.10.2018    source источник
comment
Я тоже хочу узнать!   -  person Luca De Nardi    schedule 29.10.2018


Ответы (4)


это невозможно с anguar 7.0.0, вам нужно обновить до angular 7.1.0, тогда у вас есть:

[cdkDragDisabled]="condition"

который отлично работает!

person cucuru    schedule 30.11.2018
comment
Могу ли я показать перемещение той же карточки через CSS. Как и на изображении (ссылка), он показывает движущиеся текстовые данные, а не всю карточку (со стилями CSS) medium.com/@er.markar/ - person Sunil Garg; 14.08.2019

Если вы хотите отключить перетаскивание для определенного элемента перетаскивания, вы можете сделать это, установив вход cdkDragDisabled для элемента cdkDrag.

<div cdkDropList class="list" (cdkDropListDropped)="drop($event)">
<div *ngFor="let item of dragedItems" cdkDrag 
[cdkDragDisabled]="item.disabled"> {{item.value}} </div>
</div>
person Mohd. Shariq    schedule 07.01.2019

В CdkDrag недавно была добавлена ​​функция сброса.

Например, если у вас есть следующий перетаскиваемый div:

<div cdkDrag (cdkDragEnded)="onDragEnded($event)"></div>

Вы можете вернуть его в исходное положение следующим образом:

onDragEnded(event: CdkDragEnd): void {
    if (condition) {
        event.source._dragRef.reset();
    }
}

https://github.com/angular/components/issues/13661

person AleRubis    schedule 13.06.2019

Я искал эту функцию целую вечность. Оказывается, достаточно просто:

private _canceledByEsc = false;

@HostListener('window:keyup', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
    if (event.key === 'Escape') {
        this._canceledByEsc = true;
        document.dispatchEvent(new Event('mouseup'));
    }
}

handleDrop() {
    if (!this._canceledByEsc) {
        // probably just return and don't do any array manipulations
    }
}

(см. Отменить перетаскивание при нажатии клавиши Angular cdk Drag and Drop)

person Attila Pinter    schedule 27.01.2019