У меня есть следующий код AngularJS. Он должен проверить, пустое поле ввода, когда я нажимаю кнопку «Отправить». Кнопка Submit передает широковещательные сообщения, которые успешно выхватывает директива. Но это не работает, когда поле пусто. Он достигает ctrl. $ Parsers.unshift, когда я начинаю вводить текст, и мое поле становится theForm.name. $ Invalid === true. Кажется, это работает наоборот.Директива-валидатор не поймает пустое поле, но заполнено поле
define(['angular'], function (angular) {
"use strict";
var requiredValidator = angular.module('RequiredValidator', []);
requiredValidator.directive('validateRequired', function() {
var KEY_ERROR = "required";
return {
scope: {
validateRequired: '=validateRequired'
},
require: 'ngModel',
link: function (scope, elem, attr, ctrl) {
function validate(value) {
var valid = !value || value === '' || value === null;
ctrl.$setValidity(KEY_ERROR, valid);
return value;
}
scope.$on('validateEvent', function (event, data) {
if (scope.validateRequired.$submitted) {
console.log("Reachable block when submitted");
ctrl.$parsers.unshift(function (value) {
console.log("Unreachable when input is empty");
return validate(value);
});
ctrl.$formatters.unshift(function (value) {
return validate(value);
});
}
});
}
};
});
return requiredValidator;
});
Форма поля сниппет:
<div>
<input type="text" name="name"
data-ng-class="{ error : theForm.name.$invalid}"
data-ng-model="customer.name"
data-validate-required="theForm">
<span data-ng-show="theForm.name.$invalid" class="error">{{getInputErrorMessage(theForm.name.$error)}}</span>
</div>
Был ли мой ответ полезным? – LordTribual
Это не отвечало на мой вопрос. Я должен был использовать директиву. Хотя я понял, как использовать объект $ error более разумно, чем форму. $ Error.required, чтобы различать разные ошибки. – inzzz
Это может быть легко перенесено на контроллер, поэтому вам не нужно использовать '$ parsers' и т. Д. – LordTribual