我已經創造了一些指令,它們幫我檢查輸入的有效性,看起來或多或少像這樣的形式檢索輸入驗證錯誤:從內部指令
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