मेरा मानना है कि ngModel
एंगुलरजेएस इनपुट्स और डाइरेक्टिव का आशय यह है कि अमान्य इनपुट को मॉडल में कभी खत्म नहीं होना चाहिए । मॉडल हमेशा मान्य होना चाहिए। अमान्य मॉडल के साथ समस्या यह है कि हमारे पास वॉचर्स हो सकते हैं जो अमान्य मॉडल के आधार पर आग और अनुचित (अनुचित) क्रियाएं करते हैं।
जैसा कि मैंने देखा है, यहाँ उचित समाधान $parsers
पाइपलाइन में प्लग करना है और यह सुनिश्चित करना है कि अमान्य इनपुट इसे मॉडल में नहीं बनाता है। मुझे यकीन नहीं है कि आपने चीजों को देखने की कोशिश कैसे की या आपके साथ वास्तव में क्या काम नहीं किया, $parsers
लेकिन यहां एक सरल निर्देश है जो आपकी समस्या को हल करता है (या समस्या की कम से कम मेरी समझ):
app.directive('customValidation', function(){
return {
require: 'ngModel',
link: function(scope, element, attrs, modelCtrl) {
modelCtrl.$parsers.push(function (inputValue) {
var transformedInput = inputValue.toLowerCase().replace(/ /g, '');
if (transformedInput!=inputValue) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
};
});
जैसे ही उपरोक्त निर्देश घोषित किया जाता है, इसका उपयोग इस तरह किया जा सकता है:
<input ng-model="sth" ng-trim="false" custom-validation>
जैसा कि @Valentyn Shybanov द्वारा प्रस्तावित समाधान में हमें ng-trim
निर्देश का उपयोग करने की आवश्यकता है यदि हम इनपुट की शुरुआत / अंत में रिक्त स्थान को अस्वीकार करना चाहते हैं।
इस दृष्टिकोण का लाभ 2 गुना है:
- मॉडल के लिए अमान्य मान का प्रचार नहीं किया जाता है
- एक निर्देश का उपयोग करना इस कस्टम सत्यापन को बार-बार देखने वालों को दोहराए बिना किसी भी इनपुट को जोड़ना आसान है