2016-03-21 16 views
0

Yineleme yinelemesinden gelen alanlardan doğrulamaları yapmakta sorun yaşıyorum. Bir hatayı tatmin ettiğimde, aynı alandaki her alan da tatmin olur. Bunu yapmanın başka bir yolu var mı? Ng-modelini ad yerine doğrulama göstergesi olarak kullanmak gibi mi?ng yinelemesinde AngularJS doğrulamaları formu

HTML

<div ng-app="angularjs-starter" ng-controller="MainCtrl"> 
    <form name="myForm" novalidate > 
    <fieldset data-ng-repeat="choice in choices"> 
     <input type="text" ng-model="choice.name" name="fieldname" placeholder="Enter mobile number" required> 
     <span ng-hide="!myForm.fieldname.$error.required">THIS FIELD IS REQUIRED {{ myForm.fieldname.$error.required }}</span> 
     <button class="remove" ng-show="$last" ng-click="removeChoice()">-</button> 
    </fieldset> 
    <button class="addfields" ng-click="addNewChoice()">Add fields</button> 

    <div id="choicesDisplay"> 
     {{ choices }} 
    </div> 
</div> 

JS

var app = angular.module('angularjs-starter', []); 

    app.controller('MainCtrl', function($scope) { 

    $scope.choices = [{id: 'choice1'}, {id: 'choice2'}]; 

    $scope.addNewChoice = function() { 
     var newItemNo = $scope.choices.length+1; 
     $scope.choices.push({'id':'choice'+newItemNo}); 
    }; 

    $scope.removeChoice = function() { 
     var lastItem = $scope.choices.length-1; 
     $scope.choices.splice(lastItem); 
    }; 

}); 

PS:

İşte benim kodudur. Bu az çabayla yapılabilir

+0

Ben 'adı' özelliği olarak 'choice.id' veya' choice.name' kullanırsınız çalışması gerekir = "nestedMyForm" umut veri ng-formu eklendi nasıl. Başka seçenek göremiyorum. Doğrulama çalışması yapmak için alanların farklı isimlerine sahip olmanız gerekir. –

+0

Tamam teşekkürler, sadece başka bir seçenek varsa şansımı test ediyor –

cevap

2
<div ng-app="angularjs-starter" ng-controller="MainCtrl"> 
    <form name="myForm" novalidate > 
    <fieldset data-ng-repeat="choice in choices" data-ng-form="nestedMyForm" > 
     <input type="text" ng-model="choice.name" name="fieldname" placeholder="Enter mobile number" required> 
     <span ng-hide="!nestedMyForm.fieldname.$error.required">THIS FIELD IS REQUIRED {{ nestedMyForm.fieldname.$error.required }}</span> 
     <button class="remove" ng-show="$last" ng-click="removeChoice()">-</button> 
    </fieldset> 
    <button class="addfields" ng-click="addNewChoice()">Add fields</button> 

    <div id="choicesDisplay"> 
     {{ choices }} 
    </div> 
</div> 

Kontrol ben

+0

Bu aslında işe yaradı! Çok teşekkürler dostum! –

+0

@Dean Christiam Armada (thumbsup) :) –

0

Ben eklemeden bunu yapabilirsiniz sanmıyorum eğer

Bu artımlı ile girişin adı niteliğini manipüle yapılabilir ama acaba farkındayım isim alanında artış. Sen hile yapmak gerekir

<input type="text" ng-model="choice.name" name="fieldname_{{$index}}" required> 
+0

Daha hızlısın :) Aynı yanıtı vermek istedim – Slytherin

+0

BU ALAN GEREKLİ {{myForm.fieldname. $ error.required}} bu bölümün kodu da olacak mı? –

+0

Önerinizi denedim ama çalışmadım. Dinamik adı yapmak doğrulamayı doğru şekilde algılamaz. tuhaf. –

0

böyle bir şey ile kolayca yapabilirsiniz - i olmaya alan adını nasıl değiştiğini fark - tarla + $ endeksi yüzden ng-tekrarı

içindeki her yineleme betweeen farkı söyleyebilirim
<div ng-app="angularjs-starter" ng-controller="MainCtrl"> <form name="myForm" novalidate > <fieldset data-ng-repeat="choice in choices"> 
     <input type="text" ng-model="choice.name" ng-init="vm.name='field'+$index" name="{{vm.name}}" placeholder="Enter mobile number" required> 
     <span ng-hide="!myForm.{{vm.name}}.$error.required">THIS FIELD IS REQUIRED {{ myForm.{{vm.name}}.$error.required }}</span> 
     <button class="remove" ng-show="$last" ng-click="removeChoice()">-</button> </fieldset> <button class="addfields" ng-click="addNewChoice()">Add fields</button> 

    <div id="choicesDisplay"> 
     {{ choices }} </div> </div> 
+0

Kodunuzu plunkr üzerinde çalıştı ama işe yaramıyor –