Mam dyrektywę sprawdzania poprawności o nazwie valid-number
, która służy do ustawiania ważności formularza za pomocą opcji $ setValidity - działa to dobrze dla wartości tekstowych wpisywanych w polu wprowadzania, do których dyrektywa zastosowała się jako atrybut.Zatwierdzanie formularza początkowego Angularjs z dyrektywami
HTML jest
<form name="numberForm">
<input name="amount" type="text" ng-model="amount" required valid-number /></form>
Dyrektywa jest jak postępować
angular.module('test',[]).directive('validNumber',function(){
return{
require: "ngModel",
link: function(scope, elm, attrs, ctrl){
var regex=/\d/;
ctrl.$parsers.unshift(function(viewValue){
var floatValue = parseFloat(viewValue);
if(regex.test(viewValue)){
ctrl.$setValidity('validNumber',true);
}
else{
ctrl.$setValidity('validNumber',false);
}
return viewValue;
});
}
};
});
Jednak Chciałbym również walidacji być wyzwalany i ustawić css do nieprawidłowej clsss jeżeli wartość wejścia Box jest inicjalizowany, gdy strona jest załadowana po raz pierwszy, jest nieprawidłowa, np. jeśli ustawię $scope.amount = 'not a number'
, oczekiwałbym, że pole wejściowe ma zastosowaną dyrektywę, ale nie ma radości. Aby podświetlić not a number
jako nieważną, muszę wprowadzić zmiany w treści wejścia, które wyzwala dyrektywę.
W jaki sposób mogę zagwarantować, że dyrektywa będzie obowiązywać niezależnie od tego, czy zainicjowano <input>
?
Pełny przykładowy kod jest tutaj;
To działało świetnie. – GrahamB
Naprawdę świetny post i podkreśla ważne szczegóły, takie jak parsery $ i formatery $, które są trudne do znalezienia w dokumentacji. – Tobias
Po prostu przechodzenie przez skomplikowane sprawdzanie pól krzyżowych i ten wpis zapisał dzień - lub zmieniłem dzień w kilka minut heh! – bchesley