Ich habe einen asynchronen Validator, der einen Dienst aufruft, der 200 (OK) oder 400 (BadRequest) mit einer Nachricht zurückgibt.
Ich möchte die Nachricht als Validierungsnachricht zurückgeben, kann aber nicht herausfinden, wie die Nachricht angezeigt werden kann. Ich habe ein paar Dinge ohne Erfolg ausprobiert.
%Vor%Ich würde vorschlagen, die globale Ausnahmebehandlung auf Serverseite durchzuführen Wenn ein Fehler auftritt, senden Sie den Erfolg mit der Fehlermeldung
als false %Vor%Andernfalls senden Sie json mit Erfolg als wahr mit Wert
%Vor%Dann auf UI-Seite Handle-Ausnahme mit
%Vor%Hier ist ein Rätsel: Ссылка
Die Idee ist, dass die Direktiven myValidator
und myErrorMessage
ihre Fehlermeldung über die Direktive myErrorHandler
synchronisieren. Ärgerlich finde ich keine Möglichkeit, auf den Grund zuzugreifen, der vom Validator an reject
übergeben wurde.
Bearbeiten: Ich habe die Geige aktualisiert. Jetzt verwendet myValidator
zwei asynchrone Validatoren. Ich habe auch eine ValidatorPromise
erstellt, um den myErrorHandler
Controller zu aktualisieren. Dies ist, wie ich in meinem Kommentar unten beschrieben habe.
Das HTML:
%Vor%Das JavaScript:
%Vor%Ich habe einen Plocker vorbereitet, von dem ich denke, dass er das macht, was Sie wollen. Es verwendet eine modifizierte Version von ui-validate, aber ich denke, dass Sie die Idee trotzdem verstehen können.
Ich habe den Dienst 'remoteValidator' definiert. Es hat eine Methode 'validate', die die Reise zum Server simuliert, die ein Versprechen zurückgibt, das mit einer Nachricht zurückweist, wenn der Wert 'schlecht' ist.
%Vor%Dann habe ich im Controller einen Validator definiert, der diesen Service verwendet und die Fehlermeldung erfasst und das Versprechen zurückgibt, damit der Validierer Ihrer Wahl die Arbeit erledigt.
%Vor%Auf diese Weise erscheint, wenn Sie im asynchronen Eingabefeld "schlecht" schreiben, wenn Versprechen gelöst werden, eine Fehlermeldung im Bereich zusammen mit dem Namen des Validators in form.field. $ error list.
Ein Ausschnitt des HTML:
%Vor%Ich weiß, dass das Ablegen der Nachricht in 'errorMsg' nicht die beste ist. Es könnte besser gemacht werden, aber ich muss in die de-validate-async-Direktive einsteigen.
Ich hoffe, es hilft.
Tags und Links angularjs validation