2013-09-25 22 views
6

Zacząłem używać modułu keyp-ui keypress i zastanawiałem się, czy istnieje sposób na tworzenie globalnych skrótów klawiszowych, które działają bez względu na to, gdzie jestem umieszczony w ciele.globalne wiązania klawiszy kątowych

Próbowałem połączyć moje ui-keydown z ciałem, ale ponieważ nie jest w centrum uwagi, kluczowe zdarzenia nie są uruchamiane.

np

<body ui-keydown="{'pageup':'nav_to($event, \'users\')'}"> 

wiem, może po prostu skupić div i dołączyć klawiszy do tego, ale to, co się dzieje, gdy mam formularza i chcę, aby uzyskać dostęp do wszystkich globalnych klawiszy w obrębie każdej dziedzinie?

+0

Czy próbowałeś powiązać wydarzenie z '$ window' w swojej funkcji kontrolera' directive' lub 'directive'? – rogerz

+0

Mam teraz i narzeka na "obiekt nie ma metody", więc spróbowałem umieścić funkcję apply w mojej metodzie nav_to, ale go nie rozpoznałem. Czy jest jakiś specjalny sposób na zrobienie tego? – map7

+0

Czy możesz umieścić jsfiddle? –

Odpowiedz

16

Spróbuj tego w głównym kontrolerze aplikacji:

angular.element($window).on('keydown', function(e) { 
     console.log(e); 
    }); 
+1

Pracował genialnie, z wyjątkiem tego, że musiałem zmienić '$ window' na' window'. –

+0

@BenFortune Powinieneś wstrzyknąć usługę [$ window] (https://docs.angularjs.org/api/ng/service/$window) jako zależność od kontrolera (lub gdziekolwiek jest on używany). – user2301179

+0

@ user2301179 Został użyty w dyrektywie i został wstrzyknięty, chociaż nie działał. –

2

Można zrobić regulator i ustawić go na znacznika body i ustawić klucz zwrotnego zdarzenia, a także:

<body ng-controller="keycontroller" ui-keyup="{'enter':'callback($event)'}" > 
    <input type="text" ng-model="test1" /> 
    <input type="text" ng-model="test2" /> 
</body> 

A potem set:

function keycontroller($scope) { 
    $scope.test1= "It should work here..."; 
    $scope.test2= "...and also here."; 

    $scope.callback = function fn($event) { 
    console.log("Enter key pressed"); 
}; 

} 

var app = angular.module("app", ['ui.keypress']); 
app.controller("keycontroller", keycontroller);