Angular - ngb - переместить фокус назад к вызывающей кнопке при раскрывающемся меню с ESC - PullRequest
0 голосов
/ 21 апреля 2020

Используя ng- bootstrap, у меня есть кнопка, которая переключает выпадающий список. Это прекрасно работает, но для доступности я хочу, чтобы фокус переместился обратно на кнопку вызова после закрытия раскрывающегося списка клавишей ES C.

Для этого я пытаюсь подписаться на ES C событие клавиатуры на openChange для isOpen и отмена подписки при закрытии раскрывающегося списка.

Код выглядит следующим образом:

 public openChange(isOpen: boolean) {

    if (isOpen) {
       fromEvent<KeyboardEvent>(window, 'keydown').pipe(
            filter(event => event.key === 'Escape'),
            takeUntil(this.closed$)
       ).subscribe(() => {
           // set focus back to the button
           this.dropdownButton.nativeElement.focus(); 
       });
    } else {
        // unsubscribe from the events
         this.closed$.next();
    }

Однако событие получает отписался до того, как событие ключа ES C могло быть перехвачено. У меня есть несколько раскрывающихся списков, использующих одну и ту же структуру, но у меня разные динамически генерируемые раскрывающиеся списки, поэтому я не могу полагаться на ngAfterOnInit и ngOnDestroy, так как множественные раскрывающиеся списки будут слушая и действуя на одно и то же действие, которое я не хочу. Любая идея, как я могу переместить фокус обратно на кнопку вызова? или как я могу прослушать ES C ключ, прежде чем отписаться?

...