你會推薦什麼方法來控制只有鍵盤的整個應用程序?我發現Spotlight lib,但它依賴於enyojs,它似乎有它自己的組件模型,整體enyojs似乎是一種矯枉過正。angular2:如何僅用鍵盤控制整個應用程序?
到目前爲止,我在app.component.ts
監聽的keydown事件:
@HostListener('window:keydown', ['$event']) onKeydown(event: any) {
event.preventDefault();
this.mainKeydownHandler.handle(event.keyCode);
}
它要處理的keydown事件的每個組件註冊到MainKeydownHandler
的處理程序,當keydown事件occures MainKeydownHandler
代表一個事件註冊的處理程序。在MainKeydownHandler
的處理方法中,相應的處理程序由document.activeElement
的類(我沒有找到更多「angular2-like」方式來獲取當前關注的元素)確定。所以現在我必須將適當的類名稱添加到一組我希望能夠關注的元素。
此外,組件的處理程序獲取所有的可選元素:
@ViewChildren('selectable') elements: QueryList<ElementRef>;
,所以我需要與處理程序的ID添加#selectable
和類我想集中每個元素。組件的處理程序然後接收keyCode
並確定接下來選擇哪個元素,或者從另一個組件返回到先前選定的元素,依此類推。
這種方法看起來很尷尬,當新組件需要處理keydown事件並且存在組件完全失去焦點的情況時,包含相當多的代碼:當我從某個列表中刪除一個項目,然後該組件被重新渲染(某些服務或MainKeydownHandler
可能會記住,但這可能會導致相當多的元素需要在通過組件瀏覽用戶的過程中記住)。
是否有更好,更簡單,更通用,更具說明性的方式來控制整個angular2應用程序,只使用鍵盤(keydown/keyup事件)?
或者,對於這種使用情況,使用Spotlight(with enyojs dep。)和angular2是否合理?你可以提供angular2 +聚光燈工作的運動員。我無法讓這兩個人一起工作。
你想瀏覽周圍的鍵盤元素還是有一定的自定義操作在遊戲中響應鍵盤事件? – sabithpocker
只是導航(上,下,右,左)和選擇(輸入) –