2013-09-25 5 views
6

私はangle-ui keypressモジュールの使用を開始しましたが、ボディ内のどこに配置されていても機能するグローバルショートカットキーを作成する方法があるのだろうかと思っていました。angle-uiグローバルキーバインド

ui-keydownをボディにリンクしようとしましたが、フォーカスがないため、キーイベントは発生しません。

例:

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

私はちょうどdiv要素を集中し、それにキーバインディングを添付することができ知っているが、私は、フォームを持っていると私はそれぞれのフィールド内のすべてのグローバルキーバインディングをアクセスしたいとき、何が起こりますか?

+0

あなたの 'controller'または' directive'リンク関数で '$ window'にイベントをバインドしようとしましたか? – rogerz

+0

私は今、「オブジェクトにはメソッドがありません」という文句がありますので、nav_toメソッドにapply関数を追加しようとしましたが、認識できませんでした。それを行う特別な方法はありますか? – map7

+0

あなたはjsfiddleを置くことができますか? –

答えて

16

あなたのメインアプリのコントローラでこれを試してみてください:

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

'$ window'を' window'に変更しなければならなかったことを除いて、うまくいきました。 –

+0

@BenFortune [$ window](https://docs.angularjs.org/api/ng/service/$window)サービスは、コントローラ(またはそれが使用されている場所)に依存するものとして注入する必要があります。 – user2301179

+0

@ user2301179命令で使用されていて、注入されましたが、機能しませんでした。 –

2

あなたは、コントローラを作り、bodyタグの上にそれを設定し、同様にキーイベントのコールバックを設定することができます。

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

そして、設定:

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);