Обработка нажатия клавиши ctrl при употреблении наркотиков с помощью ng2-dragula
Я разрабатываю приложение 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: я перешел на Angular материал Drag and Drop: /