Ich habe dieselbe Frage in unterschiedlicher Form gestellt, aber niemand hat geantwortet. Ich bekomme kein klares Bild davon, was die Formatierer und Parser in eckigen js tun.
Per Definition sehen sowohl die Formatierer als auch die Parser mir ähnlich. Vielleicht irre ich mich, da ich neu in diesem Winkel bin.
Formatierer Definition
Array von Funktionen, die als Pipeline ausgeführt werden sollen, wenn sich der Modellwert ändert. Jede Funktion wird aufgerufen und gibt den Wert an die nächste weiter. Dient zum Formatieren / Konvertieren von Werten für die Anzeige in der Steuerung und Validierung.
Parser-Definition
Array von Funktionen, die als Pipeline ausgeführt werden sollen, wenn das Steuerelement einen Wert aus dem DOM liest. Jede Funktion wird aufgerufen und gibt den Wert an die nächste weiter. Dient zum Bereinigen / Konvertieren des Werts sowie zur Validierung. Zur Validierung sollten die Parser den Gültigkeitsstatus mit $ setValidity () aktualisieren und für ungültige Werte undefiniert zurückgeben.
Bitte helfen Sie mir, beide Funktionen anhand eines einfachen Beispiels zu verstehen. Eine einfache Darstellung von beiden wird geschätzt.
(123) 123-1234
für eine Telefonnummer. Parser lesen die Daten bei jeder Änderung und werden normalerweise verwendet, um den $ valid-Status der Eingabe festzulegen. Die Dokumente enthalten Beispiele für beide.Antworten:
Dieses Thema wurde in einer verwandten Frage sehr gut behandelt: Wie wird in AngularJS in beide Richtungen gefiltert?
Zusammenfassen:
Hier ist ein einfaches Beispiel, das auf einem Beispiel in der NgModelController-API-Dokumentation aufbaut :
Sie können es in Aktion sehen: http://plnkr.co/UQ5q5FxyBzIeEjRYYVGX?plnkr=legacy
Wenn Sie einen Namen eingeben (Ansicht zum Modell), sehen Sie, dass das Modell immer in Kleinbuchstaben geschrieben ist. Wenn Sie jedoch auf eine Schaltfläche klicken und den Namen (Modell zum Anzeigen) programmgesteuert ändern, wird das Eingabefeld immer in Großbuchstaben angezeigt.
quelle
ngModel.$setViewValue(transformedInput);
undngModel.$render();
zu rendern.$formatters
tun ist, sofort von zurückgesetzt$validators
. ; (Eine andere Verwendung für Formatierer und Parser ist, wenn Sie Datumsangaben in UTC-Zeit speichern und bei Eingaben in Ortszeit anzeigen möchten. Dazu habe ich die folgende Datepicker-Direktive und den folgenden utcToLocal-Filter erstellt.
Es verwendet diesen utcToLocal-Filter, der sicherstellt, dass das Eingabedatum im richtigen Format vorliegt, bevor es in die Ortszeit konvertiert wird.
moment.js wird verwendet, um lokale in utc-Daten zu konvertieren.
pickadate.js ist das verwendete Datepicker-Plugin
quelle