Используя 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 ключ, прежде чем отписаться?