का ख्याल रखता है वहाँ एक अंतर्निहित नहीं है एक फॉर्म के लिए ng-change
करने के लिए।
यह भी, की जरूरत नहीं जा सकता है क्योंकि अगर आप अपने दृश्य मॉडल ठीक से संगठित है, तो अपने फ़ॉर्म इनपुट संभावना एक निश्चित दायरे-सामने आ रहा संपत्ति के लिए बाध्य कर रहे हैं:
$scope.formData = {};
और इसमें देखें:
<form name="form1">
<input ng-model="formData.a">
<input ng-model="formData.b">
</form>
तो फिर तुम मॉडल परिवर्तन के लिए गहरे देख सकते हैं ($watch
के साथ) (और तत्वों पर जो कुछ भी debounce विकल्प लागू है कि आप की जरूरत है):
$scope.$watch("formData", function(){
console.log("something has changed");
}, true);
फिर समस्या है, यह निश्चित रूप से है कि यह एक गहरी घड़ी है और यह महंगा है। साथ ही, यह न केवल फ़ॉर्म में बदलावों के लिए प्रतिक्रिया करता है, बल्कि किसी भी स्रोत से formData
में परिवर्तन के लिए भी प्रतिक्रिया करता है।
तो, एक विकल्प के रूप में, आप फॉर्म की तारीफ करने और फॉर्म की परिवर्तन घटनाओं पर प्रतिक्रिया करने के लिए अपना स्वयं का निर्देश बना सकते हैं।
.directive("formOnChange", function($parse){
return {
require: "form",
link: function(scope, element, attrs){
var cb = $parse(attrs.formOnChange);
element.on("change", function(){
cb(scope);
});
}
}
});
और उपयोग है:
<form name="form1" form-on-change="doSomething()">
<input ng-model="formData.a">
<input ng-model="formData.b">
</form>
उदाहरण के लिए plunker।
ध्यान दें, कि "परिवर्तन" घटना केवल एक पाठ इनपुट के लिए कलंक पर निकाल दिया जाता है प्रति jQuery documentation:
change
घटना एक तत्व जब अपने मूल्य परिवर्तन करने के लिए भेज दिया जाता है के रूप में,। यह घटना <input>
तत्वों, <textarea>
बक्से और <select>
तत्वों तक सीमित है।चयन बॉक्स, चेकबॉक्स और रेडियो बटन के लिए, जब उपयोगकर्ता माउस के साथ चयन करता है तो ईवेंट तुरंत निकाल दिया जाता है, लेकिन अन्य तत्व प्रकारों के लिए ईवेंट तब तक स्थगित हो जाता है जब तक कि तत्व फोकस न हो जाए।
मेरा मानना है कि आपका सर्वश्रेष्ठ दांव (है कि आप पर debounce चाहते हैं) अपने सभी इनपुट के लिए एक निर्देश बनाने के लिए और debounce वहाँ सेटिंग सेट करने के लिए है , लेकिन इसे अपने इनपुट से एनजी मॉडल और अन्य सामान पास करने दें। –