У меня есть несколько полей в форме:
<input name="participant{{$index}}email" type="email" ng-model="participant.email" ng-trim="true"
required ng-minlength="1" ng-maxlength="255"
email-uniqueness-validator="{{$index}}">
Я использую директиву emailUniquenessValidator, чтобы проверить, не вступил ли какой-либо участник в тот же адрес электронной почты. Если это так, я показываю сообщение об ошибке:
<div ng-messages="enroll['participant' + $index + 'email'].$error">
<div ng-message="emailUniqueness">The email addresses must be different for every applicant...</div>
</div>
Проблема в том, что у меня есть два поля с одним и тем же адресом электронной почты, и оба они показывают ошибку. Затем пользователь редактирует одно электронное письмо, чтобы оно отличалось от любого другого сообщения электронной почты, и сообщение об ошибке в этом поле исчезало, как ожидалось, но как я могу удалить сообщение об ошибке со второго поля электронной почты, которое стало уникальным, изменив первое поле электронной почты?
Директива:
.directive('emailUniquenessValidator',
function() {
return {
require : 'ngModel',
link: function (scope, element, attrs, ngModel) {
scope.$watch(attrs.ngModel, function () {
var currentEmailFieldNo = attrs.emailUniquenessValidator;
var diffEmails = differentEmails(scope, currentEmailFieldNo);
ngModel.$setValidity('emailUniqueness', diffEmails);
if (!diffEmails) {//one field has changed and there is no duplicates, but we need to remove validation errors from the other field
cleanDuplicateEmailErrors(scope);
}
});
}
}
});
differentEmails функция:
function differentEmails(scope, currentEmailFieldNo) {
differentEmails = true;
var currentEmail = currentEmailFieldNo >= 0
? scope.applicantEnrollDto.participants[currentEmailFieldNo].email
: scope.applicantEnrollDto.email;
var mainEmail = scope.applicantEnrollDto.email;
if (currentEmailFieldNo < 0) {
if (emailInArray(currentEmail, scope.applicantEnrollDto.participants)) {
differentEmails = false;
}
} else {
var applicantsNo = scope.applicantEnrollDto.participants.length
var differentEmails = true;
if (applicantsNo) {
differentEmails = !hasDuplicates(scope.applicantEnrollDto.participants);
if (differentEmails) {
if (currentEmail === mainEmail) {
differentEmails = false;
}
}
}
}
return differentEmails;
}
Проблема была решена легко, обратившись к форме в области
$scope.form["participant"+i+"email"].$setValidity('emailUniqueness', errorsOff);
differentEmails
делать? можешь выложить свой код?