I'm mit dieser Methode: http://plnkr.co/edit/A6gvyoXbBd2kfToPmiiA?p=preview nur Felder auf Weichzeichner zu validieren. Dies funktioniert gut, aber ich möchte auch sie zu validieren (und damit zeigen die Fehler für diese Felder, wenn überhaupt), wenn der Benutzer die Schaltfläche ' submit' klickt (nicht eine echte senden, sondern eine Daten-ng-Klick-Aufruf zu einer Funktion)
Gibt es eine Möglichkeit, die Validierung für alle Felder erneut auszulösen, wenn der Benutzer auf die Schaltfläche klickt?
Nun, der Angular-Weg wäre, um es zu behandeln Validierung, - da es bei jeder Modelländerung tut - und nur zeigen das Ergebnis an den Benutzer, wenn Sie wollen.
In diesem Fall entscheiden Sie, wann die Fehler angezeigt werden sollen, Sie müssen nur ein Flag setzen: http://plnkr.co/edit/0NNCpQKhbLTYMZaxMQ9l?p=preview
Soweit ich weiß, gibt es ein Problem zu Angular eingereicht, um uns mehr fortgeschrittene Form Kontrolle haben. Da es nicht gelöst ist, würde ich dies verwenden, anstatt alle vorhandenen Validierungsmethoden neu zu erfinden.
Bearbeiten: Aber wenn Sie auf Ihren Weg bestehen, hier ist Ihre modifizierte fiddle mit Validierung vor dem Senden. http://plnkr.co/edit/Xfr7X6JXPhY9lFL3hnOw?p=preview Der Controller sendet ein Ereignis, wenn der Button angeklickt wird, und die Direktive erledigt die Validierungsmagie.
Ein Ansatz ist, alle Attribute zu erzwingen, schmutzig zu sein. Das kann man in jedem Controller machen, aber es wird sehr unübersichtlich. Es wäre besser, eine allgemeine Lösung zu haben.
Der einfachste Weg, der mir einfiel, war die Verwendung einer Direktive
Hier ist die Richtlinie
myModule.directive('submit', function() {
return {
restrict: 'A',
link: function(scope, formElement, attrs) {
var form;
form = scope[attrs.name];
return formElement.bind('submit', function() {
angular.forEach(form, function(field, name) {
if (typeof name === 'string' && !name.match('^[\$]')) {
if (field.$pristine) {
return field.$setViewValue(field.$value);
}
}
});
if (form.$valid) {
return scope.$apply(attrs.submit);
}
});
}
};
});
Und aktualisieren Sie Ihr Formular html, zum Beispiel:
<form ng-submit='justDoIt()'>
wird:
<form name='myForm' novalidate submit='justDoIt()'>
Ein vollständiges Beispiel finden Sie hier: http://plunker.co/edit/QVbisEK2WEbORTAWL7Gu?p=preview
Ich mag die dieser Ansatz bei der Behandlung von Validierung auf Schaltfläche klicken.
Es gibt keine Notwendigkeit, etwas von Controller aufrufen,
es ist alles mit einer Richtlinie behandelt.
auf github