【发布时间】:2016-04-01 08:41:27
【问题描述】:
我面临一个似乎无法解决的问题。 我有几个输入,每个指令都用于验证输入值,如下所示:
<div class="row form-group">
<div class="col-sm-6">last name</div>
<div class="col-sm-6">
<div class="input-group" ng-class="{'has-error': form.lastname.$invalid && (form.lastname.$touched || form.$submitted)}">
<input type="text" name="lastname" class="form-control"
model-blur
validator-lastname
ng-trim="true"
ng-model="fields.lastname.value"
ng-maxlength="fields.lastname.validation.maxLength">
<input-group-addon class="input-group-addon"
iga-char=""
iga-form="form"
iga-field="form.lastname"
iga-if-touched="true">
</input-group-addon>
</div>
<form-message-list fml-form="form"
fml-field="form.lastname"
fml-label="Last name"
fml-fieldData="fields.lastname">
</form-message-list>
</div>
</div>
此字段需要以下模式:/^[\'a-zA-Z_]+( [\'a-zA-Z_]+)*$/
我的问题是: 当我在输入中添加无效值时,例如: / ,我的无效消息仍然存在,并且 ng-invalid-pattern 仍然在我的字段中。
当我像这样将此模式添加到我的字段时:ng-pattern="/^[\'a-zA-Z_]+( [\'a-zA-Z_]+)*$/" 我没有任何问题。但是当我尝试通过我的指令 validator-lastname 进行验证时,它只检查一次。当我用无效值填充输入然后将其更改为允许的空时,ng-invalid-pattern 错误仍然存在。
这是我的指令:
angular.module('app')
.directive('validatorLastname', validatorLastname);
/* @ngInject */
function validatorLastname() {
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(/^[\'a-zA-Z_]+( [\'a-zA-Z_]+)*$/);
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]);
}
}
}
我做了一个 JSFiddle 来重现这个问题:http://jsfiddle.net/sZZEt/537/
我希望有人能指出我正确的方向。 提前致谢。
【问题讨论】:
-
您不需要将元素绑定到 onChange 事件(如果您想验证每次击键)或 onSubmit(表单,如果您只想在提交时验证)跨度>
-
嗯,它确实会验证,但只有当我输入一个无效值然后删除该值时,错误对象才会更新。
标签: javascript angularjs angularjs-directive