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




hotkeys (4)

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

मैं 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>

यह वह तरीका था जिससे मुझे अंत में काम करना पड़ा।

html एलिमेंट और ng-keyup और ng-keydown body तत्व में ng-app जोड़ें:

<html ng-app="myApp" ng-controller="MainCtrl">
.....
<body ng-keydown="keyPress($event);" ng-keyup="keyRelease($event);">

तब मेरे नियंत्रक में funcitons ईवेंट कॉलिंग इवेंट के साथ सौदा करते हैं। जो कुंजी कोड प्राप्त करने के लिए है (मेरे कार्यान्वयन में मैंने रूटस्कॉप पर एक संस्करण सेट किया है लेकिन आप अन्य नियंत्रकों को भी प्रसारित कर सकते हैं)

$scope.keyPress = function(eve) {
    if (eve.which === 16) { // shift
        // $rootScope.$broadcast('doShift');
        $rootScope.shiftOn = true;
    };
};

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

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




hotkeys