2013-06-06 7 views
7

मुझे AngularJS में फॉर्म सत्यापन के साथ कोई समस्या है और फ़ॉर्म के अंदर वस्तुओं का एक ng-repeat का उपयोग कर रहा है।AngularJS ng-repeat और फॉर्म सत्यापन

HTML:

<div ng-app> 
    <div ng-controller="EditController"> 
     <form name="form" novalidate>Name: 
      <br/> 
      <input type="text" ng-model="model.name" required="" /> 
      <hr />Products: 
      <br/> 
      <div ng-repeat="product in model.products"> 
       <div> 
        <input type="text" ng-model="product.name" required="" /> 
        <input type="text" ng-model="product.price" required="" /> <a href="javascript:void(0)" ng-click="remove($index)">Remove</a> 

       </div> 
      </div> 
      <hr /> 
      <button ng-disabled="form.$invalid || !form.$dirty" ng-click="save()">save</button> 
      <div ng-show="form.$invalid && !form.$pristine">There are errors.</div> 
      <div ng-show="!form.$dirty && form.$pristine">No changed detected to be saved.</div> 
      <div> 
       <p>Dirty? {{form.$dirty}}</p> 
       <p>Invalid? {{form.$invalid}}</p> 
       <p>Pristine? {{form.$pristine}}</p> 
      </div> 
     </form> 
    </div> 
</div> 

जे एस:

function EditController($scope) { 
    $scope.model = { 
     name: "Phil", 
     products: [{ 
      name: "Foo", 
      price: 12.99 
     }, { 
      name: "Bar", 
      price: 15.99 
     }, { 
      name: "FooBar", 
      price: 24.99 
     }] 
    }; 

    $scope.remove = function(index){ 
     $scope.model.products.splice(index, 1); 
    }; 

    $scope.save = function() { 
     console.log("saved"); 
    }; 
} 

फिडल:

http://jsfiddle.net/66V6m/2/

प्रतिकृति

रेम क्लिक करके 1 आइटम निकालें ओवे, फॉर्म गंदा नहीं होता है इसलिए बटन सक्षम नहीं होता है।

यदि आप नाम फ़ील्ड संपादित करते हैं, तो फॉर्म गंदा हो जाता है।

सरणी से किसी आइटम को हटाने के तरीके पर कोई विचार फ़ॉर्म को गंदा बना देता है?

+1

काम कर रहा है हो सकता है इस टिप्पणी तुम्हारी मदद करेगा: http://docs.angularjs.org/guide/ फॉर्म # टिप्पणी -622004399 – akonsu

उत्तर

11

कोणीय सिर्फ उद्देश्य तुम यहाँ पूरा करने के लिए कोशिश कर रहे हैं के लिए एक $setDirty() समारोह प्रदान करता है। सीधे शब्दों में यह इतना

<input type="text" ng-model="product.price" required="" /> 
<a href="javascript:void(0)" ng-click="remove($index); form.$setDirty(true);">Remove</a> 

की तरह अपने ng-click विशेषता में इसे जोड़ने मैं अपने बेला काँटेदार है और यह here

+0

मुझे आश्चर्य है, यह एक बग क्यों नहीं है? – blazkovicz

2

यहां एक तरीका है।

$scope.remove = function (index) { 
    $scope.model.products.splice(index, 1); 
    $scope.form.$dirty = true; 
}; 
+0

आपको $ setDirty() अन्यथा फॉर्म का उपयोग करना चाहिए। $ pristine अभी भी सच होगा – blazkovicz

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