Proste i eleganckie rozwiązanie będzie wyglądać następująco: -
Utwórz usługę globalną, która będzie przechowywać powiązania skrótów z elementami klikalnymi. Uwaga: - Użyj NgOnDestroy, aby usunąć wiązania na komponencie zostanie zniszczony.
Teraz utwórz dyrektywę, która będzie wprowadzać kody klawiszy jako dane wejściowe.
<button [angularHotKey]="[17,78]">New Document</button>
<!-- CTRL = 17 & n = 78 -->
Teraz w swoim głównym składnikiem większości, słuchać naciśnięć klawiszy i używać ich jako wskaźników do lokalizowania elementów w Global Service dla skrótów klawiszowych. Teraz po uzyskaniu referencji zrób coś takiego.
Zakładam, że masz sformatowany nagrany keycodes w tym formacie = 23.01.32 -..., nie zapomnij, aby posortować je w rosnącej/malejącej format, zarówno podczas dodawania go do pary kluczy tablicy w eksploatacji i sprawdzając
if(this.keypair[combo].length)this.keypair[combo].click();
this.keypair[combo]
zawiera odniesienie do elementu w którym angularHotKey directive
dodano.
Dalsze Uwagi: 1.) W dyrektywie angularHotKey
dodając nową parę kluczy i elementów/klikalny odniesienia należy sprawdzić, czy nie istnieją parowanie z samego combo, jeśli tak rzucać wyjątek, będzie to pomocne podczas debugowania i uniemożliwiając wykonywanie głupich błędów, a w klasie Angular 2 component, w metodzie ngOnDestroy zdefiniować logikę usuwania wszystkich skrótów sparowanych z jego elementami potomnymi.
Odwiedź stronę http://keycode.info/, aby uzyskać kody klawiszy wszystkich typów kluczy znajdujących się na klawiaturze.
JavaScript multiple keys pressed at once odpowiedzi z najdrobniejsze szczegóły na temat sposobów radzenia sobie z kombi naciśnięć klawiszy
wydaje '' nie jest obsługiwany przez „? (Okno:.? KeyDown)'. Prawdopodobnie tylko kody wymienione na stronie https://github.com/angular/angular/blob/630d93150a58581a0d474ebf1befb5d09b6813c5/modules/angular2/src/platform/browser/browser_adapter.dart –
Na mojej klawiaturze "?" jest faktycznie "Shift + /", a (okno: keydown) łapie je osobno. –
Nie jestem pewien, co zrobić z Twojego ostatniego komentarza. Czy to pytanie, czy wyjaśnienie, ...? –