AngularJS ng-keydown निर्देश केवल<इनपुट> संदर्भ के लिए काम कर रहा है?




hotkeys (4)

धन्यवाद! इसे लपेटने के लिए मुझे यह काम मिला, मैंने अपने निर्देश में $ दस्तावेज़ को इंजेक्ट किया, फिर:

MyApp.directive('myDirective', function($document) {
return {
...
 $document.keydown(function(e){
   console.log(e)
 })
}

मैं AngularJS के लिए बहुत नया हूं, लेकिन अब तक अपनी पसंद के हिसाब से काफी पाया। अपनी वर्तमान परियोजना के लिए मुझे हॉटकी कार्यक्षमता की आवश्यकता है और यह देखकर खुशी हुई कि यह 1.1.2 रिलीज के बाद से समर्थित है।

एनजी-कीडाउन निर्देश ( http://code.angularjs.org/1.1.3/docs/api/ng.directive:ngKeydown ) इनपुट प्रकारों के लिए अपेक्षित के रूप में काम करता है, लेकिन मुझे किसी अन्य संदर्भ जैसे div आदि के लिए विफल रहता है, जो अजीब लगता है यह देखते हुए कि दस्तावेज़ अन्यथा कहता है।

यहां काम नहीं करने का एक न्यूनतम उदाहरण ( http://jsfiddle.net/TdXWW/12/ ) दिया गया है:

<input ng-keydown="keypress($event)">
<div ng-keydown="keypress($event)">

नोट: मुझे पता है कि इसे सादे jQuery ( http://www.mkyong.com/jquery/how-to-check-if-an-enter-key-is-pressed-with-jquery/ ) के साथ संभाला जा सकता है, लेकिन मैं बहुत कुछ यह समझने के लिए पसंद करें कि एंगुलरजेएस में इससे कैसे निपटें।


मुझे वही समस्या हो रही थी और इस टिप्पणी में दिए गए इस सरल टिप का पालन करके इसे ठीक करने में सक्षम था: https://.com/a/1718035/80264

आपको div को एक tabindex देने की आवश्यकता है ताकि वह फोकस प्राप्त कर सके।

<div id="testdiv" tabindex="0"></div>

charlietfl की टिप्पणी ने चीजों को साफ कर दिया और घटना को $ (दस्तावेज़) में बांधने के लिए उम्मीद के मुताबिक काम किया! संदेश ले लो: AngularJS प्रलेखन वास्तव में संपूर्ण नहीं है, अर्थात पृष्ठभूमि ज्ञान की मांग करता है।


angular.module('app').directive('executeOnEnter', function () {
    return {
        restrict: 'A',
        link: function (scope, el, attrs, $rootScope) {                      
            $('body').on('keypress', function (evt) {
                if (evt.keyCode === 13) {
                    el.trigger('click', function () {
                    });
                }            
            })

        },
        controller: function ($rootScope) {
            function removeEvent() {
                $("body").unbind("keypress");
            }
            $rootScope.$on('$stateChangeStart', removeEvent);
        }
    }
})




hotkeys