Обработка нажатия клавиши ctrl при употреблении наркотиков с помощью ng2-dragula - PullRequest
0 голосов
/ 13 февраля 2019

Я разрабатываю приложение 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 : /

...