Какой подход вы бы рекомендовали контролировать всего приложения только с клавиатуры? Я нашел Spotlight lib, но это зависит от enyojs, который, похоже, имеет свою собственную модель компонента, а общий enyojs кажется излишним.angular2: как управлять всем приложением только клавиатурой?
До сих пор я слушаю на KeyDown событий в app.component.ts
:
@HostListener('window:keydown', ['$event']) onKeydown(event: any) {
event.preventDefault();
this.mainKeydownHandler.handle(event.keyCode);
}
Каждый компонент, который нужно обрабатывать KeyDown события регистров MainKeydownHandler
«S обработчиков и когда KeyDown событие MainKeydownHandler
делегатов встречается, мероприятие для зарегистрированного обработчика , Соответствующий обработчик определяется классом document.activeElement
(я не нашел больше «углоподобного» способа получения текущего сфокусированного элемента) в методе обработки MainKeydownHandler
. Поэтому теперь я должен добавить соответствующее имя класса в группу элементов, которые я хочу сосредоточить.
Кроме того, обработчик компонента получает все выбираемые элементы с:
@ViewChildren('selectable') elements: QueryList<ElementRef>;
так что мне нужно добавить #selectable
и класс с идентификатором обработчика к каждому элементу я хочу сосредоточиться. Затем обработчик компонента получает keyCode
и определяет, какой элемент выбрать следующий, или вернуться к ранее выбранному элементу из другого компонента и так далее.
Этот подход кажется неудобным, требует довольно много кода, когда новый компонент хочет обрабатывать события keydown, и есть ситуации, когда компонент полностью теряет фокус: когда я удаляю элемент из некоторого списка, а затем этот компонент перезагружен (некоторые сервис или MainKeydownHandler
, помните, но это могло привести к довольному количеству элементов, которые нужно запомнить по пути навигации пользователя через компоненты).
Есть ли лучший, более простой, более общий и более декларативный способ управления целым угловым приложением только с клавиатурой (события keydown/keyup)?
В качестве альтернативы, разумно ли использовать Spotlight (с enyojs dep.) С угловым2 для этого прецедента? И можете ли вы предоставить рабочий плункер с угловым2 + прожектором. Я не мог заставить этих двух работать вместе.
Вы хотите, чтобы перемещаться по элементам с клавиатуры или имеют некоторые пользовательские действия в ответ на события клавиатуры, как в игре? – sabithpocker
просто навигация (вверх, вниз, вправо, влево) и выберите (введите) –