У меня есть форма AngularJS, в которой есть настраиваемый валидатор для проверки серверной частью сервера, является ли входное значение уникальным или нет. Уникальная проверка выполняется директивой mob-async-validate-unique
в приведенном ниже примере.
Форма выглядит примерно так:
<form class="form-floating" novalidate="novalidate" ng-submit="saveItem(item)">
<div class="form-group filled">
<label class="control-label">Key</label>
<input type="text" class="form-control" ng-model="item.Key" mob-async-validate-unique >
</div>
<div class="form-group">
<button type="submit" class="btn btn-lg btn-primary">Save</button>
</div>
</form>
Я хочу использовать одну и ту же форму для оба добавления и редактирования модели, которую я поместил на $scope
.
Все отлично работает, за исключением того факта, что уникальный валидатор срабатывает при операции редактирования, даже если значение совпадает с исходным значением, а затем проверяет уникальность как false, потому что значение уже существует. Валидатор помечает поле как недействительное в следующих случаях:
- Измените значение поля, а затем отредактируйте его до исходного значения.
- Отправьте форму, ничего не меняя
Каков наилучший способ добиться этого? Наивный способ, о котором я могу думать, заключается в том, что мне придется сохранить исходное значение в переменной $scope.originalValue
, а затем добавить атрибут к уникальному проверенному элементу, чтобы назвать эту переменную. В валидаторе я прочитаю это значение из $scope и сравню его с текущим значением, чтобы валидатор принял его, когда два значения совпадают. Я иду вперед и реализую это.
Я использую уникальный валидатор общим способом в нескольких местах (да, в элементе <input>
используется еще несколько атрибутов, которые я не включил в пример кода для простоты и удобочитаемости), и мне нужно, чтобы валидатор полностью функционировал на он собственный, и в идеале я хочу, чтобы контроллер $scope
был вне поля зрения, чтобы я мог использовать собственный асинхронный валидатор в любом случае / где угодно.