2013-09-07 8 views
8

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

मैं कोणीय (1.2rc) के स्रोत को बदलते हैं NgModelController के $ setViewValue कार्यान्वयन:

this.$setViewValue = function(value) { 
... 
    if (this.$modelValue !== value) { 
    this.$modelValue = value; 
    ... 
    } 
}; 
इस के लिए

:

this.$setViewValue = function(value) { 
... 
    if (this.$modelValue !== value && this.$valid) { 
    this.$modelValue = value; 
    ... 
    } 
}; 

यह बिल्कुल मैं क्या चाहते हो रहा है, लेकिन मैं डॉन ' टी उचित तरीके से ऐसा करने के बारे में नहीं जानते। इस व्यवहार को बदलने का सही तरीका क्या है? या क्या मेरे प्रयास किसी कारण से विफलता के लिए बर्बाद हो गए हैं?

अपडेट: जोड़ा गया उदाहरण।

<div ng-controller="MyCtrl"> 
    {{validNumber}} 
    <form> 
     <input 
      type="number" 
      ng-model="validNumber" 
      required 
      min="10" 
      max="20" 
     /> 
    </form> 
</div> 

और जे एस:

उदाहरण के लिए http://jsfiddle.net/FJvgK/1/ एचटीएमएल पर देखने

var myApp = angular.module('myApp',[]); 

function MyCtrl($scope) { 
    $scope.validNumber = 15; 
} 

संख्या 10 और 20 के बीच मूल्यों के लिए ठीक से पता चलता है, लेकिन मैं इसे इतना चाहते हैं कि यदि आप अचानक बॉक्स में '8' टाइप करें, या दूसरे अंक को '1' छोड़कर अंतिम वैध संख्या अभी भी ऊपर दिखाएं। यही है, मॉडल का हमेशा वैध मान होता है, भले ही नियंत्रण न हो।

उत्तर

7

मेरा मानना ​​है कि AnugularJS मान्यताओं का डिफ़ॉल्ट व्यवहार मॉडल को अद्यतन नहीं करना है यदि मान पास किया गया है तो अवैध है। आप developer guide को देखो और Custom Validation के माध्यम से जाना है, तो इन नमूनों यह भी पता चलता है कि मॉडल को अद्यतन नहीं किया गया है या यूआई

+0

हाँ क्षमा करें मैंने एक उदाहरण जोड़ा। मैं नहीं चाहता कि क्षेत्र शून्य हो जाए, मैं चाहता हूं कि यह वैध मान रखे। –

+1

आप सही थे। यह मॉडल को नहीं बदलता है, यह यूआई में कहीं और अमान्य मॉडल मान प्रदर्शित नहीं करता है जिसे मैं उम्मीद/उम्मीद नहीं करता था। –

2

रूप Chandermani कहा में उपलब्ध कराई गई अमान्य मान पर मंजूरी दे दी है, यह डिफ़ॉल्ट व्यवहार, यहाँ है कि शो के एक उदाहरण है यह कार्रवाई में:

<form name="myform"> 
    <input type="text" name="myinput" ng-model="myvalue" ng-minlength="4" required> 
</form> 

Is the input valid ? {{ myform.myinput.$valid }} <br /> 
Input's value : {{ myvalue }} 

{{myvalue}} इनपुट में कम से कम 4 वर्ण लिखने तक कुछ भी नहीं दिखाता है।

सर्वश्रेष्ठ सादर।

संपादित

आप एक डिफ़ॉल्ट मान की जरूरत है, मुझे लगता है कि आप 2 मूल्यों में अपने मूल्य विभाजित कर सकते हैं, एक गणना मूल्य का उपयोग:

var validNumber = 15; 
    $scope.validNumber = function() { 
     if ($scope.myform.myNumber.$valid) return $scope.myNumber; 
     else return validNumber; 
    }; 

मैं यहाँ एक उदाहरण की स्थापना: http://jsfiddle.net/7vtew/1/

+1

हाँ क्षमा करें मैंने एक उदाहरण जोड़ा। मैं नहीं चाहता कि क्षेत्र शून्य हो जाए, मैं चाहता हूं कि यह वैध मान रखे। –

+0

मैंने आपके उदाहरण का परीक्षण किया। मॉडल मान '' (खाली स्ट्रिंग) बन जाता है जब फ़ील्ड में टाइप किया गया मान मान्य नहीं होता है, जो परेशानी होती है क्योंकि '' myinputs सत्यापन बाधाओं के अनुसार मान्य मान भी नहीं है। http://jsfiddle.net/yU3Zv/ –

+0

यदि आपको डिफ़ॉल्ट मान की आवश्यकता है तो मैंने एक संभावित समाधान के साथ संपादित किया। धन्यवाद। – Prezbar

0

इस डिफ़ॉल्ट व्यवहार है, लेकिन, आप संशोधित कर सकते हैं इस ngModelOptions का उपयोग कर निर्देश

<input 
    type="number" 
    ng-model="validNumber" 
    required 
    min="10" 
    max="20" 
    ng-model-options="{ allowInvalid: true }" 
    /> 

प्रलेखन: https://docs.angularjs.org/api/ng/directive/ngModelOptions अनुभाग 'मॉडल अपडेट और सत्यापन' अनुभाग देखें