Aktivieren Sie die Validierung eines Feldes, wenn ein anderes Feld geändert wird
Habe ich eine benutzerdefinierte überprüfung der Richtlinie, die aufgerufen wird, ist richtig, wenn ein Feld geändert wird. Jedoch, ob dieses Feld gültig ist, basiert auch auf einem anderen Feld den Wert. Das zweite Feld ist ein select-Liste, wenn das von Bedeutung ist.
Ich Frage mich, ob es einige Möglichkeit, die ich auslösen könnte Validierung manuell, wenn der zweiten form ist verändert. Vielleicht mithilfe der ng-change
Veranstaltung. Was ist der richtige Weg, um mit etwas wie diesem?
Hier ist meine Richtlinie:
angular.module('myApp', []).
directive('validage', function () {
return {
require: 'ngModel',
link: function (scope, elem, attr, ngModel) {
function validate(value) {
var valid = true;
if ((GetDateDifference(new Date(value), new Date()) < 16 || GetDateDifference(new Date(value), new Date()) > 129)
&& scope.dep.DependantType == "Spouse") {
valid = false;
}
ngModel.$setValidity('validage', valid);
return value;
}
//For DOM -> model validation
ngModel.$parsers.unshift(function (value) {
var valid = true;
if ((GetDateDifference(new Date(value), new Date()) < 16 || GetDateDifference(new Date(value), new Date()) > 129)
&& scope.dep.DependantType == "Spouse") {
valid = false;
}
ngModel.$setValidity('validage', valid);
return value;
});
//For model -> DOM validation
ngModel.$formatters.unshift(function (value) {
var valid = true;
if ((GetDateDifference(new Date(value), new Date()) < 16 || GetDateDifference(new Date(value), new Date()) > 129)
&& scope.dep.DependantType == "Spouse") {
valid = false;
}
ngModel.$setValidity('validage', valid);
return value;
});
}
};
});
Wenn Sie neu in AngularJS, ich würde definitiv empfehlen, Lesen Sie diese 2 Artikel: Teil 1 & Teil 2. Sie geben einen überblick über AngularJS Formen.
InformationsquelleAutor der Frage PFranchise | 2013-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach der Suche eine Menge für diese habe ich gefunden, die wir auslösen können, die Validierung ganz einfach, indem Sie
$validate()
auf das gewünschte Feld.So zum Beispiel, wenn Ihr Formular ist mit der Bezeichnung my_form (d.h. in das markup der form-tag hat eine
name="my_form"
- Attribut) und den Namen des Feldes, das Sie überprüfen möchten, ist Datum (in der markup-input-Feld hat einename="date"
- Attribut), dann, wie Sie vorgeschlagen, die Sie verwenden können, dieng-change
Veranstaltung der zweiten Feld und rufen$scope.my_form.date.$validate();
wenn der ng-change-Funktion aufgerufen wird.InformationsquelleAutor der Antwort gneri
Ich hatte ein ähnliches problem: zwei form-Felder "Pause" (für $Umfang.monitor.Intervall) und "timeout" (für $Umfang.monitor.timeout) mit der Bedingung, dass timeout darf nicht mehr als die Hälfte des Intervalls.
Zuerst habe ich noch eine zusätzliche Prüfung auf timeout, der dies überprüft. Jetzt brauchte ich zum auslösen des timeout-validator auch bei der Intervall-änderungen. Ich erreichte dies durch Beobachtung des Monitors.interval-Eigenschaft des Modells:
Ohne "wenn" der timeout-Wert wurde entfernt, während intialisation der dialog.
InformationsquelleAutor der Antwort stephanme
Ich landete hinzufügen der Richtlinie auf das zweite Feld und dann die änderung der Richtlinie hinzufügen, um die Fehlermeldung zu dem Feld mit der Fehlermeldung. Möglicherweise gibt es ein besserer Weg, aber das ist das, was ich am Ende machen.
InformationsquelleAutor der Antwort PFranchise
War ich nicht in der Lage zu bekommen
ng-blur="myForm.myField.$validate()"
arbeiten in AngularJS 1.5, vielleicht, weil das Modell fürmyField
leer war.Jedoch
ng-blur="myForm.myField.$setTouched()"
funktioniert hat.InformationsquelleAutor der Antwort isherwood