Ich habe eine Validierungsanweisung namens valid-number
, die verwendet wird, um die Gültigkeit eines Formulars mit $ setValidity zu setzen - das funktioniert für alle Textwerte, die ich in das Eingabefeld eingeben, auf die die Direktive angewendet wurde als ein Attribut.Angularjs anfängliche Formularvalidierung mit Direktiven
Die HTML ist
<form name="numberForm">
<input name="amount" type="text" ng-model="amount" required valid-number /></form>
Die Richtlinie als
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;
});
}
};
});
jedoch folgen, ich möchte auch, dass die Validierung ausgelöst werden und die CSS auf einen ungültigen clsss gesetzt, wenn der Wert der Eingangs Box wird initialisiert, wenn die Seite zum ersten Mal geladen wird, ist ungültig, zB wenn ich $scope.amount = 'not a number'
setze, würde ich erwarten, dass das Eingabefeld die Direktive hat, aber keine Freude. Damit not a number
als ungültig markiert werden kann, muss ich den Inhalt der Eingabe ändern, was die Anweisung auslöst.
Wie kann ich sicherstellen, dass die Richtlinie gilt für was auch immer die <input>
initialisiert wird?
Ein vollständiges Codebeispiel ist hier;
Das hat super funktioniert. – GrahamB
Wirklich toller Beitrag und es hebt wichtige Details wie $ Parser und $ Formatierer hervor, die in der Dokumentation schwer zu finden sind. – Tobias
Gerade in komplexe Cross-Field-Validierungen und diesen Beitrag gerettet den Tag - oder verwandelte sich einen Tag in ein paar Minuten heh! – bchesley