我已经创造了一些指令,它们帮我检查输入的有效性,看起来或多或少像这样的形式检索输入验证错误:从内部指令
app.directive("initialDate", function(){
return{
require: '?ngModel',
restrict:"A",
link:function(scope, element, attrs, ngModel){
scope.$watch(attrs.ngModel, function() {
validate();
});
attrs.$observe('initialDate', function() {
validate();
});
var validate = function() {
var date = Date.parse(ngModel.$viewValue);
var initialDate = Date.parse(attrs.initialDate);
ngModel.$setValidity('initial-date', date >= initialDate);
}
}
}
});
现在,我想自定义消息添加到输入,选择等等,这些都没有通过验证,但我不想一个接一个地用ng-if添加一个span或somethinng(这是我想避免的很多工作)。
我第一次尝试是创建这样的指令:所以现在
app.directive("ngInvalid", function(){
restrict:"C",
...
});
但是didn't工作我正尝试这一
app.directive("input", function(){
return {
require:"?ngModel",
link:function(scope, element, attrs, ctrl){
scope.$watch(function() {
return element.attr('class');
}, function(newVal, oldVal){
if (newVal == oldVal) return;
if (element.hasClass("ng-invalid")){
element.parent().append("<span class = 'error' style='color:red'>There was an error</span>");
}else{
element.parent().find(".error").remove();
}
});
}
}
});
所以,这一个工程(更或更少,它需要更多的工作,嘿嘿),但我将不得不创建一个选择,textareas等,并对每种类型的错误进行一些检查,如果我想显示自定义消息。
此外,它真的看起来很脏。我真的觉得一定有什么事情,我可以说看起来更像这个指令内做到:
...
link:function(scope, element, attrs, ctrl){ /***element is the input or select or textarea... ***/
if (!element.$isValid){
switch (element.$validationErrors[0]){
case "emailValidation": element.parent().append("<span class = 'error' style='color:red'>Email format not correct</span>"); break;
case "initialDate": element.parent().append("<span class = 'error' style='color:red'>Date cannot be previous to {{initialDate}}</span>"); break;
case "pattern": element.parent().append("<span class = 'error' style='color:red'>Format incorrect</span>"); break;
}
}
}
...
我一直在寻找在文档和浏览的一些问题,但主要是我发现需要使用的解决方案表单控制器,我想避免这种情况。
是否有一些方法可以让我从输入中检索错误?
编辑
要清楚,let's说,输入没有包装形式的标签里面,但股利,或别的东西。我如何访问输入指令中的每个错误?
看一下ng-messages – dewd
看起来不错,但并不能解决我想要实现的两件事:如果我想在每个字段上显示一个显示错误,则不依赖于使用表单并必须为每个输入创建一个组件。 – sergio0983