У меня возникла проблема, которую я, похоже, не могу решить. У меня есть поле, которое я проверяю с помощью директивы, которая соответствует входному значению с помощью регулярного выражения.AngularJS revalidate on submit via директива
Мой вход:
<input type="text"
name="emailaddress"
class="form-control"
ng-model="fields.emailaddress.value"
ng-maxlength="fields.emailaddress.validation.maxLength"
validator-emailaddress
required />
Моя директива:
angular.module('forms')
.directive('validatorEmailaddress', validatorEmailaddress);
/* @ngInject */
function validatorEmailaddress() {
var directive = {
require: 'ngModel',
link: link
};
return directive;
function link(scope, element, attrs, modelCtrl) {
var valid = false;
var formatter = function (inputValue) {
if (inputValue) {
var res = inputValue.match(/^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/);
if (res && res.length > 0) {
valid = true;
}
modelCtrl.$setValidity('pattern', valid);
valid = false;
}
return inputValue;
};
modelCtrl.$parsers.push(formatter);
if (scope[attrs.ngModel] && scope[attrs.ngModel] !== '') {
formatter(scope[attrs.ngModel]);
}
}
}
Теперь мой вопрос заключается в следующем:
Когда я заполняю на входе, все это хорошо, однако, когда я заполнить ввод с недопустимым значением, а затем повторно открыть модальный в этом случае, недопустимый шаблон больше не присутствует, поэтому пользователь может продолжить недопустимое значение ввода.
Как я могу настроить свою директиву на входное значение и на отправку?
Заранее спасибо.
Вы определили синтаксический анализатор, а не валидатор, см. Пользовательскую проверку (https://docs.angularjs.org/guide/forms) – fantarama
, как вы отправляете форму непосредственно через html? вы можете использовать ng-click() для вызова функции для проверки вашей электронной почты и отправки формы через угловой $ http. – maleeb
Я знаю, что это не то, о чем вы спрашиваете, но есть атрибут ng-pattern, который вы можете добавить в поле ввода, он принимает регулярное выражение, и если вход неверен, он будет давать form.input. $ Error.pattern, чтобы вы могли использовать это для пользовательской проверки. См. Https://docs.angularjs.org/api/ng/directive/ngPattern –