Mam sytuację, w której użytkownik musi wprowadzić dane wejściowe w obszarach tekstowych utworzonych przez ng-repeat. Jeśli użytkownik wprowadzi wartość, która została już wprowadzona, nowe i istniejące wartości powinny zostać zweryfikowane jako fałszywe. Jeśli jedna z wartości (istniejąca lub nowa) zostanie zmieniona, walidacja powinna zostać odpowiednio zaktualizowana.Angularjs - jak sprawdzić unikalne dane wejściowe i czy istnieje zduplikowany znacznik zarówno jako nieprawidłowy
Próbowałem różnych opcji, obecnie jest to, co się zbliża, ale wciąż nie jest w 100%.
HTML:
<body ng-app="ap" ng-controller="con">
<table>
<tr>
<td>name</td>
</tr>
<tr ng-repeat="person in persons">
<td>
<ng-form name="personForm">
<div ng-class="{ 'has-error' :
personForm.personName.$invalid }">
<input type='text'
name="personName"
ng-class="empty"
ng-model="person.name"
ng-change="verifyDuplicate(this, person)"/>
</div>
</ng-form>
</td>
</tr>
</table>
JavaScript:
var app = angular.module("ap",[]);
app.controller("con",function($scope){
$scope.persons = [
{name: 'a'},
{name: 'b'},
{name: 'c'}
];
$scope.empty = "normal";
$scope.verifyDuplicate = function(domScope, object){
for(var i = 0; i < $scope.persons.length; i++) {
if($scope.persons[i].name === object.name && $scope.persons[i] !== object) {
domScope.personForm.personName.$setValidity('duplicate',false);
}
else {
domScope.personForm.personName.$setValidity('duplicate',true);
}
}
};
});
Każda pomoc w tej sprawie będzie mile widziane.
Oto ryba Fiddle of code
Świetnie, będę to daje iść jak najszybciej znaleźć lukę, nadzieję, że to działa w prawdziwym problem światowy, do którego chcę go zastosować. – avn
Działa świetnie, dziękuje za pomoc. – avn
@ dapeng-li To działało dla mnie, ale nie było dobre dla testów jednostkowych. czy można to przekształcić w niestandardową dyrektywę walidacyjną? –