Konvertieren von Eingabewerten in Großbuchstaben in Winkel 2 (Wert, der an ngControl übergeben wird)

7

Ich versuche, die Eingabefelder mit ngControls Wert in Winkel 2 zu validieren. Ich muss überprüfen, dass der Benutzer den Wert immer in Großbuchstaben eingibt.

Jetzt müssen wir den vom Benutzer eingegebenen Wert in Großbuchstaben umwandeln. Aber ich handle Werte aus Eingabefeldern mit ngControl, nicht ngModel (in Anbetracht der Tatsache, dass ich das ngModelChange-Ereignis verwendet hätte, um den Wert in Großbuchstaben zu ändern.)

Was ist der beste und kostengünstigste Weg, den von ngControl verwendeten Wert zu konvertieren?

    
ankitkamboj 06.03.2016, 11:29
quelle

6 Antworten

15

Wie @Eric Martinez vorgeschlagen hat, können Sie eine lokale Vorlagenvariable erstellen und die Großbuchstabe an die Eigenschaft value für das Eingabeereignis binden:

%Vor%

Alternativ können Sie dies zu einer Direktive machen:

%Vor%

Um die Direktive zu verwenden, geben Sie UpperCaseText in der Direktivenliste Ihrer Komponente an:

%Vor%

Demo PLnkr

    
pixelbits 06.03.2016 16:43
quelle
9

Hier ist meine Lösung:

Verwenden Sie den Host-Listener, um das Eingabeereignis anzuhören, und erzwingen Sie es dann in Großbuchstaben.

%Vor%

Mit dieser Anweisung können Sie die Eingabe leicht in Großbuchstaben erzwingen:

%Vor%     
subaru710 28.06.2017 11:45
quelle
6

Ich würde eine benutzerdefinierte Implementierung von ControlValueAccessor erstellen. Letzteres würde einer Anweisung entsprechen, die das Eingabeereignis des Hosts abhören würde. Auf diese Weise können Sie Großbuchstaben eingeben, die der Benutzer füllt. Das Steuerelement enthält den Wert automatisch in Großbuchstaben.

Hier ist die Implementierung:

%Vor%

Vergessen Sie nicht, diesen benutzerdefinierten Accessor in den Richtlinienanbietern zu registrieren. Auf diese Weise wird der benutzerdefinierte Wert-Accessor anstelle des Standard-Accessors verwendet.

%Vor%

Fügen Sie die Direktive im Attribut directories der Komponente hinzu, in der Sie diesen Ansatz verwenden möchten.

Weitere Informationen finden Sie in dieser Klasse:

Dieser Link könnte zusätzliche Hinweise geben (siehe Abschnitt "NgModel-kompatible Komponente):

Thierry Templier 06.03.2016 13:28
quelle
4

pixelbits hat eine großartige Lösung geliefert, aber es funktioniert nicht in der neuesten Version von Angular (v4.3.1) als Direktiven werden von der Komponente abgeschrieben. Meine Lösung basiert nur auf seiner Antwort, arbeitet aber mit den neuesten

Ich biete eine generische Lösung mit einer benutzerdefinierten Attribut-Direktive mit einer booleschen Eingabe an, die die Eingabe in Großbuchstaben umwandelt, wenn sie wahr ist.

Großbuchstabe.directive.ts:

%Vor%

Hier ist die entsprechende App-Komponente mit der Vorlage.

app.ts

%Vor%

Hier ist ein Plnkr , der das demonstriert.

    
KIA 24.07.2017 08:51
quelle
3

Zumindest nach meiner Erfahrung fand ich zwei der Antworten hier aufschlussreich, aber nicht auf eigene Faust: von Thierry Templier (mit dem ersten Kommentar) und von cal .

Ich habe Teile von beiden zusammengestellt und kam auf diese Version, die jetzt mit Angular 4.1.1 in reaktiver Form arbeitet:

%Vor%

Dies ist für Kleinbuchstaben, aber alles gilt auch für Großbuchstaben, benennen Sie die Direktive um, ersetzen Sie sie durch selector und transformValue .

Bearbeiten:
Ein einfaches Anwendungsbeispiel aus HTML-Code mit einer solchen Anweisung:

%Vor%     
superjos 02.08.2017 00:10
quelle
1

Hier ist meine allgemeinere Lösung, die im Grunde wie DefaultValueAccessor mit einer Text "Transformator" -Funktion hinzugefügt wird. Sie würden also

verwenden %Vor%

In Ihrer Komponente haben Sie die Großbuchstabe-Funktion (Sie könnten andere Dinge neben Großbuchstaben tun, wie eine Maske implementieren) ...

%Vor%

Richtlinie ...

%Vor%     
Cal 10.03.2017 22:02
quelle