2015-02-28 7 views
9

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

मैं एनजी-ब्लर इवेंट का उपयोग करने की कोशिश कर रहा हूं, हालांकि, मेरे हैंडलर के अंदर मान पुराना मान है, न कि नया मान दर्ज किया गया है। क्या मैं कुछ गलत कर रहा हूं या पाठ इनपुट के बाद नए प्रतिबद्ध मॉडल मान प्राप्त करने का एक बेहतर तरीका है?

<input type="text" 
ng-model-options="{ updateOn: 'blur', debounce:0 }" 
ng-model="vm.myModel.amount" 
ng-blur="vm.handleBlurEvent(vm.myModel.amount)" /> 


vm.handleBlurEvent = function(item) 
{ 
      //alert(item.amount); //Old amount - not new amount entered 
} 

उत्तर

3

उन सुझावों के लिए धन्यवाद। मैं वास्तव में अद्यतन के लिए 1 विकल्प जोड़कर काम करने में कामयाब रहा, एनजी-मॉडल-विकल्पों की संपत्ति पर। 'डिफ़ॉल्ट' में जोड़कर सब कुछ काम किया!

एनजी-मॉडल-विकल्प = "{अपडेटऑन: 'डिफ़ॉल्ट धुंध}" चाल थी।

<input type="text" 
ng-model-options="{ updateOn: 'default blur' }" 
ng-model="vm.myModel.amount" 
ng-blur="vm.handleBlurEvent(vm.myModel.amount)" /> 


vm.handleBlurEvent = function(item) 
{ 
      //alert(item.amount); //new shows the NEW amount :-) 
} 
+0

यहां एक प्लंकर है जिसे मैंने प्रदर्शित करने के लिए बनाया है - इसे डिफ़ॉल्ट कीवर्ड के बिना आज़माएं और यह काम नहीं करेगा - इसके साथ यह ... http: //plnkr.co/edit/0cIELjdUgic5ffo77Ef4? P = पूर्वावलोकन – user1750537

+0

धन्यवाद plunkr, वास्तव में इसे डीबग करने में मदद की! आपका समाधान थोड़ा सा दोषपूर्ण है, हालांकि 'डिफ़ॉल्ट' उपप्रणाली को जोड़ता है "डिफ़ॉल्ट अद्यतन का उपयोग करें एक कार्रवाई"। मुझे लगता है कि हम चाहते हैं कि धुंधला ईवेंट तक मॉडल में अपडेट में देरी हो, तो अपडेट छोड़ें: 'धुंधला' और एनजी-ब्लर –

0

घड़ी का उपयोग करने के बारे में कैसे?

आप एक बार मॉडल इस तरह अद्यतन किया जाता है अपने तर्क कर सकते हैं:

$scope.$watch('vm.myModel.amount', function (newVal, oldVal) { 
     if (newVal != oldVal) { 
     //do your logic here. 
     } 
    }, true); 
4

मैं अभी तक debounce के साथ बेहतर किस्मत

नहीं है, लेकिन यहाँ काम अपनी बातें बनाने के लिए कोड

है
<form name="amountForm" > 
    <input type="text" name="amount" 
    ng-model-options="{ updateOn: 'blur', debounce:0 }" 
    ng-model="vm.myModel.amount" 
    ng-blur="vm.handleBlurEvent()" /> 
</form> 

vm.handleBlurEvent = function() 
{ 
    alert($scope.amountForm.amount.$viewValue); 
} 

का आनंद ...

15

यह user1750537 द्वारा पिछले प्रतिक्रिया से फिर से काम कर रहा है, नियंत्रण कलंक जब तक मॉडल अद्यतन करने में देरी और उसके बाद एक बार परिवर्तन की प्रक्रिया, कोई de-उछाल की आवश्यकता है और मॉडल मूल्य की उम्मीद के रूप में अपने परिवर्तन तर्क से पहले स्थापित किया जाएगा।

<input type="text" 
ng-model-options="{ updateOn: 'blur' }" 
ng-model="vm.myModel.amount" 
ng-change="vm.handleChangeEvent(vm.myModel.amount)" /> 

vm.handleChangeEvent = function(item) 
{ 
    alert(item.amount); //new shows the NEW amount :-) 
} 
+0

के बजाय फ़ंक्शन निष्पादित करने के लिए एनजी-चेंज का उपयोग करें धन्यवाद क्रिस - यह समझ में आता है और यह है क्लीनर कार्यान्वयन :-) – user1750537

0

पुराना सवाल है, लेकिन मैं एक और तरीका यह मान को पढ़ने के लिए मिल गया है, मैं देरी से debounce नहीं निकाल सका है और क्या मेरे लिए काम किया टाइमआउट उपयोग कर रहा था:

$timeout(function(){ 
    var amount = this.formName.amount.value; 
    }); 

मुझे लगता है यह = ngModelController उपरोक्त कोड में।

+1

इसे एक विरोधी पैटर्न माना जाना चाहिए। यह 'टाइमआउट नरक' की ओर जाता है, जहां आपके कोड में घटनाओं के क्रम के बारे में आसानी से कारण बनना असंभव हो जाता है। आखिरकार, इस विरोधी पैटर्न को अपनाने वाले घटक के उपयोगकर्ताओं को $ टाइमआउट का उपयोग करने के लिए मजबूर किया जाएगा। $ टाइमआउट नरक की यात्रा शुरू होती है। – texta83

संबंधित मुद्दे