Я пытаюсь добавить поле проверки на один из моих входов, он должен запросить у сервера, действительно ли введенный номер НДС, поэтому я использую для этого асинхронный валидатор. Работает отлично с этим кодом:asyncValidator зависит от значения другого поля
myApp.factory('isValidVat', function($q, $http) {
return function(vat) {
var deferred = $q.defer();
console.log(vat);
$http.get('/api/vat/' + vat).then(function() {
deferred.resolve();
}, function() {
deferred.reject();
});
return deferred.promise;
}
});
myApp.directive('validVat', function(isValidVat) {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$asyncValidators.vat = isValidVat;
}
};
});
<form name="form" novalidate ng-submit="check(form)">
<div class="vat-field">
<label>VAT number
<input type="text" ng-model="formModel.vat" name="vat" valid-vat="true">
</label>
<div ng-show="registerForm.$submitted || registerForm.vat.$touched">
<span ng-show="registerForm.vat.$error.vat">
<small class="error">Your VAT address is not valid, please correct.</small>
</span>
</div>
</div>
<div class="country-field">
<label>Country
<select ng-model="formModel.country" name="country">
<option value="{{country.iso_3}}" ng-repeat="country in countries()">{{country.name}}</option>
</select>
</label>
</div>
<button type="submit">Check</button>
</form>
Однако, я хочу, чтобы эта проверка asyncValidator обусловливающие значения другого поля (страна, более конкретно, является ли страна страной ЕС). Поле страны - это поле со списком, заполненное службой, в которой записаны все страны и их данные о ватах и статус eu. Однако я не знаю, как ввести значение выбранной страны в заводскую функцию. Одна из идей заключалась в том, чтобы связать выбранную страну с ее собственным сервисом и использовать ее с завода, но затем проверка не запускается снова, когда выбрана другая страна. Если выбрана страна, не входящая в ЕС, мне все равно, что находится в поле.
Большое спасибо. Решение было проще, чем я думал, я чувствую себя настолько глупо сейчас :), но эй научился новому. – Elvin
Вам не нужно чувствовать себя глупо. Эта штука действительно немного сложна. Если вы углубляетесь и углубляетесь в проверки, они становятся все менее и менее прямолинейными. –