2012-06-29 9 views
47

मैं AngularJS मेंKeyUp पर कैसे जा सकता हूं?मैं AngularJS मेंKeyUp पर कैसे जा सकता हूं?

मैं ngChange के समान, 'ngOnkeyup' निर्देश की तलाश में हूं, लेकिन मुझे कुछ भी उपयुक्त नहीं मिल रहा है।

यदि ऐसा कोई निर्देश नहीं है, तो क्या ब्राउज़र-मूल ऑनकीप ईवेंट से नियंत्रक में कॉल करने का एक साफ तरीका है?

उत्तर

67

संपादित करें: देखने maklemenz से नीचे दूसरा जवाब जो को संदर्भित करता है नए निर्मित एनजी-KeyUp निर्देश

आप इस्तेमाल कर सकते हैं angular-ui library:

कोणीय-ui के साथ

, आप कर सकते हैं बस

<input ui-event="{keyup: 'myFn($event)'}" 

यदि आप किसी अन्य लाइब्रेरी का उपयोग नहीं करना चाहते हैं, तो ऐसा करने का सबसे प्रभावी और सरल तरीका यह है:

जे एस

myApp.directive('onKeyup', function() { 
    return function(scope, elm, attrs) { 
    elm.bind("keyup", function() { 
     scope.$apply(attrs.onKeyup); 
    }); 
    }; 
}); 

HTML:

<input on-keyup="count = count + 1"> 

संपादित: आप पता लगाने के लिए जो कुंजी दबाने था चाहता था, तो आप दो मूल विकल्प वास्तव में है। निर्देश के भीतर अनुमत कुंजी को संभालने के लिए आप निर्देश में एक विशेषता जोड़ सकते हैं, या आप अपने नियंत्रक को दबाए गए कुंजी को पास कर सकते हैं। मैं आम तौर पर निर्देश की सिफारिश करता हूं कि कुंजी विधि को संभाल लें।

यहाँ दोनों तरीकों का एक उदाहरण है: http://jsfiddle.net/bYUa3/2

+0

अपने जवाब के लिए धन्यवाद का उपयोग करता है देखने के लिए चाहते हैं कीकोड। मैं आपके गैर-कोणीय-ui समाधान के साथ किस कुंजी को दबाया गया था? – fadedbee

+1

मैंने कुंजी का पता लगाने के बारे में मुख्य पोस्ट में कुछ जोड़ा। –

+1

वे वही हैं जो मुझे चाहिए। आपकी मदद के लिए धन्यवाद, मैं वास्तव में AngularJS का उपयोग करके प्यार करना शुरू कर रहा हूं। नॉकआउटजेएस का उपयोग करने के एक साल के अनुभव को फेंकना बुरा लगता है, लेकिन एंगुलरजेएस बस नए देवताओं के लिए इतना अधिक रखरखाव और पहुंचने योग्य दिखता है। – fadedbee

7

यदि डिफ़ॉल्ट निर्देश पर्याप्त नहीं हैं तो आपको अपना कस्टम निर्देश बनाना होगा। ऐसा कुछ, हो सकता है?

<!doctype html> 
<html lang="en" ng-app="app"> 
    <body ng-controller="ctrl"> 
    <input ng-onkeyup="keyup()"/> 
    <script src="js/lib/angular-1.0.0.min.js"></script> 
    <script> 
     angular.module('app', []).directive('ngOnkeyup', function() { 
     return { 
      restrict: 'A', 
      scope: { 
      func: '&ngOnkeyup' 
      }, 
      link: function(scope, elem, attrs) { 
      elem.bind('keyup', scope.func); 
      } 
     }; 
     }); 

     function ctrl($scope) { 
     $scope.keyup = function() { 
      alert('keyup fired'); 
     }; 
     } 
    </script> 
    </body> 
</html> 
0

FYI करें - मैं सिर्फ यह आज के लिए खोज रहा था और ऐसा लगता है कोणीय के GitHub में एक शाखा है कि KeyUp keydown के मुद्दे को संबोधित नहीं है।

https://github.com/angular/angular.js/pull/1622

यह मास्टर में विलय कर दिया गया है ... लेकिन यह नहीं लगता है जैसे कि यह जब तक 1.1.3

एक रिलीज में दिखाई देगा आदेश विकल्प एनजी-KeyUp साथ कोणीय बनाने के लिए जगह में आप गिट से कोड डाउनलोड कर सकते हैं और फ़ोल्डर पर rake package चला सकते हैं। बेशक विंडोज़ पर इसका मतलब है कि नोड.जेएस और रूबी और संभवतः कुछ अन्य हुप्स इंस्टॉल करना (मुझे Win32 पर फोर्क त्रुटियां थीं)

हालांकि, मुझे अंत में "अंतर्निहित" कीपअप मिली।

5

पहले ही उल्लेख इवेंट बाइंडर के अलावा, आप अब ये सुविधाजनक ui कुंजी * निर्देशों कोणीय यूआई से उपयोग कर सकते हैं:

<textarea 
ui-keypress="{13:'keypressCallback($event)'}"> 
</textarea> 
<textarea 
    ui-keydown="{'enter alt-space':'keypressCallback($event)'}"> 
</textarea> 
<textarea 
    ui-keyup="{'enter':'keypressCallback($event)'}"> 
</textarea> 

<script> 
$scope.keypressCallback = function($event) { 
alert('Voila!'); 
$event.preventDefault(); 
}; 
</script> 

http://angular-ui.github.io/#/directives-keypress

75

हर किसी के लिए आज उस सुविधा की तलाश में, कृपया आधिकारिक ng-keyup निर्देश का उपयोग करें:

<input type="text" ng-keyup="{expression}" /> 
+1

देखें सामान्य रूप से विंडो ऑब्जेक्ट पर एक कुंजी अप या कीडाउन ईवेंट प्राप्त करने का कोई तरीका है; इसलिए मैं जांच सकता हूं कि Ctrl दबाया जा रहा है या नहीं? –

+0

@TheRedPea आप पर अपना एनजी-एप और अपना एनजी-कीप डाल सकते हैं। फिर $ rootScope में फ़ंक्शन जोड़ें या एनजी-कंट्रोलर भी जोड़ें। परीक्षण नहीं किया गया लेकिन काम करना चाहिए। – maklemenz

5

बस किसी को भी मदद करने के लिए, जो मेरे जैसे, केवल एक निश्चित कुंजी पर ईवेंट को आग लगाना चाहता था। यहां ng-keyup का उपयोग कर कोड है जो मेरे cancel() फ़ंक्शन को कॉल करता है, और केवल तभी, जब से बचें दबाया जाता है। पता लगाने के लिए आपको कम से this website

ng-keyup="$event.keyCode == 27 ? cancel() : ''" 

ध्यान दें कि के रूप में उल्लेख किया @maklemenz इस बनाया में कोणीय निर्देश अब उपलब्ध