Событие Keydown блокирует и предотвращает обнаружение угловых изменений - PullRequest
0 голосов
/ 23 октября 2019

Событие Keydown происходит постоянно, когда пользователь удерживает кнопку в Chrome. Кажется, это блокирует, так как таймеры глобального установленного rxjs перестают работать во время длительного нажатия клавиш, и обнаружение угловых изменений не меняет представление.

Однако я хочу включить долгое нажатие в моем приложении, чтобы пользователь могбыстро пролистайте нумерацию страниц, и по соображениям удобства использования необходимо, чтобы представление обновлялось всякий раз, когда срабатывает событие нажатия клавиши.

Я пробовал несколько вещей, чтобы добиться этого. Я оборачиваю свои события в наблюдаемые и пытаюсь работать с debounceTime, throttleTime, throttle и audTime.

Я также пытался заставить это работать с vanilla JS Dom-Events без какой-либо бизнес-логики. Что приводит меня к выводу, что это поведение по умолчанию, а также имеет смысл из моих довольно базовых знаний о Eventloop.

Часть моей службы, которая регистрирует прослушиватели событий и возвращает Observable:

 return new Observable(observer => {
            const callback = (e) => {
                e.preventDefault();
                observer.next(e);
            };
            const listenReference = this.eventManager.addEventListener(mBinding.element, event, callback);
            return () => {
                // kills the actionlistener
                listenReference();
                this.delteDescription(kbDescription);
            };
        });

Мой компонент, который регистрирует событие клавиатуры в сервисе и подписывается (здесь я попробовал все виды вещей с помощью throttle и debounce):

    this.shortcut.bindShortcut({
      key: "ArrowLeft",
      description: "Navigate to previous page",
      view: "Search Logs View"
    }).subscribe(k => {
      if (this.page - 1 >= 0) {
        this.page -= 1;
        this.loadMore(this.page, false);
      }
    });

Я довольно разочарован этим поведением, так как яне могу получить поведение, которое я хочу. Что бы я ни старался сделать эту вещь менее раздражающей из опыта UX, это не работает так хорошо.

Есть ли у меня какие-либо сведения о том, как это исправить и как на самом деле визуализировать контент без каких-либо прямых манипуляций с dom в функции обратного вызова?

Есть ли способ использовать правильную многопоточность для веб-работников для этого события?

...