Я тоже давно сталкивался с этой проблемой.Наконец, я мог бы исправить это, отправив событие mouseup
, которое будет действовать как пользователь, отпустивший мышь.
@HostListener('window:keyup', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
if (event.key === 'Escape') {
document.dispatchEvent(new Event('mouseup'));
}
}
Это чрезвычайно хакерское решение, имеющее недостатки.На самом деле, вы не отменяете перетаскивание, а просто отбрасываете.Это означает, что если вы наведите курсор cdkDropList
или один из них активен, он запустит эмиттер cdkDropListDropped
для этого списка.Что-то, что вы можете легко обойти, добавив флаг.
private _canceledByEsq = false;
@HostListener('window:keyup', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
if (event.key === 'Escape') {
this._canceledByEsq = true;
document.dispatchEvent(new Event('mouseup'));
}
}
handleDrop() {
if (!this._canceledByEsq) {
// Do my data manipulations
}
}
Надеюсь, это поможет вам ...:)