Я разрабатываю приложение Angular с помощью ng2-dragula.
Я хочу создать перетаскиваемый элемент, если на клавиатуре нажата клавиша Ctrl.
Есть ли хорошийспособ обработки нажатия клавиши «Ctrl» во время перетаскивания?
Я уже пробовал этот подход:
public constructor(private dragulaService: DragulaService,
private renderer2: Renderer2) {
this.keydownListener = this.renderer2.listen('body', 'keydown', (keyboard: KeyboardEvent) => {
this.isCtrlPressed = keyboard.ctrlKey;
});
this.keydownListener = this.renderer2.listen('body', 'keyup', (keyboard: KeyboardEvent) => {
this.isCtrlPressed = keyboard.ctrlKey;
});
public ngOnInit(): void {
this.dragulaService.drag.asObservable().pipe(
takeUntil(this.destroy))
.subscribe((x) => {
if (this.isCtrlPressed) {
// do something
}
// do something else }
Но если нажата клавиша «Ctrl», перетаскивание вообще не работает.
Если я (в качестве эксперимента) заменил 'Ctrl' на 'Shift' или 'Alt', это работает, но ужасно медленно.
Есть идеи?
UPD: Я также пробовал подходы с @HostListener из angular и fromEvent из rxjs, и во всех случаях это было похоже на ужасное слайд-шоу.
UPD2: Проблемая решил проблему с переводом слушателя клавиатуры на общий контроль и передачей результата через сервис.Об удержании клавиши «ctrl» все еще остается вопрос.
UPD3: Я перешел на Угловой материал Drag and Drop : /