Versuchen Sie zu verstehen, was der Parameter 'onlySelf' bei der Übergabe an setValue tut.
%Vor%Die Dokumentation besagt: "Wenn onlySelf wahr ist, wirkt sich diese Änderung nur auf die Validierung dieses FormControl und nicht auf seine übergeordnete Komponente aus. Dies ist standardmäßig false."
Aber ich kämpfe darum, das zu verstehen. Immer noch ziemlich neu in den modellbasierten Formen der Using Angulars.
Standardmäßig überprüft Angular2 die Formularsteuerung / Formulargruppengültigkeit bis zur obersten Ebene fallend, wenn ein Formularelementwert aktualisiert wird, es sei denn, Sie sagen nein. onlySelf
ist das Werkzeug, das Ihnen dabei hilft.
Angenommen, Sie haben ein loginForm
mit einem username
-Feld und einem password
-Feld, beide sind erforderlich, wie folgt:
Nach diesem Code ist this.loginForm.valid
true
.
Wenn Sie den Wert eines Steuerelements mit der Standardeinstellung ( onlySelf = false
) festlegen, aktualisiert Angular2 die Gültigkeit des Steuerelements sowie die Gültigkeit der Formulargruppe. Zum Beispiel:
führt zu
%Vor%Allerdings:
%Vor% ändert nur die Gültigkeit von passwordControl
:
Sagen wir es so, sagen wir, Sie haben ein Formular namens mainForm
, das gültig ist. Es hat vier Steuerelemente und alle vier haben einen Wert. Jetzt entscheiden Sie, den Wert eines Ihrer Steuerelemente zu aktualisieren, sagen wir, Sie aktualisieren es auf einen falschen Wert und Sie geben onlySelf: true
an. Wenn Sie versuchen, this.mainForm.valid
aufzurufen, erhalten Sie das Ergebnis, dass Ihr Formular gültig ist, obwohl Ihr Steuerelement nicht gültig ist und der ungültige Status das Formular nicht zulassen sollte eingereicht werden. Da die gültige Form der Formulare jedoch "true" meldet, senden Sie inkonsistente Werte an das Back-End.
Es kann verwirrend sein, warum Sie diese Eigenschaft haben, aber es kann vorkommen, dass Sie das Formular wegen eines Werts oder Steuerelements nicht ungültig machen möchten. Wahrscheinlich haben Sie einige erweiterte Prüfungen auf dem Server, und Sie möchten den Wert auf dem Server korrigieren, oder Sie sind möglicherweise auf einen Wert von einem externen Webdienst angewiesen, der zu dem Zeitpunkt möglicherweise nicht verfügbar ist. Ich bin mir sicher, dass es eine Reihe von Szenarien gibt, aber das ist etwas von Kopf bis Fuß.