Angular: Formularvalidatoren werden bei der (Neu-)Erstellung von Ansichten erneut ausgeführt

Erstellt am 28. Sept. 2017  ·  1Kommentar  ·  Quelle: angular/angular

Ich reiche ein...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[x] Bug report  <!-- Please search GitHub for a similar issue or PR before submitting -->
[ ] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Aktuelles Verhalten

Wenn die einem Formularsteuerelement zugeordnete Direktive in der Ansicht erstellt wird, werden Validatoren ausgelöst.

Erwartetes Verhalten

Validatoren sollten nicht ausgelöst werden, wenn sich die Ansicht ändert . Reaktive Formulare sollten nicht an ihre Darstellung in der Ansicht gebunden sein. Ihre Quelle der Wahrheit sollte das Modell sein .

Minimale Reproduktion des Problems mit Anleitung

https://stackblitz.com/edit/angular-reactive-forms-issue?file=app/app.component.ts

  1. Konsole öffnen.
  2. Verwenden Sie die Schaltfläche _Sichtbarkeit umschalten_, um zu bestätigen, dass Validatoren bei jeder Erstellung einer Kontrolldirektive ausgeführt werden.

Was ist die Motivation / der Anwendungsfall für die Verhaltensänderung?

  1. Fahren Sie mit den obigen Schritten fort.
  2. Drücken Sie _Fehler manuell festlegen_, um einen Fehler manuell einzufügen (dies ist ein verspottendes manuelles Setzen eines Fehlers, nachdem die Validierung vom Backend zurückgegeben wurde).
  3. Drücken Sie _Sichtbarkeit umschalten_, um sie auszublenden. In der Konsole passiert nichts.
  4. Drücken Sie sie erneut, um das Steuerelement anzuzeigen. Beachten Sie, dass Konsolenprotokolle ausgeführt werden, was bedeutet, dass Validatoren ausgeführt werden.

Beachten Sie, dass die Fehlermeldung jetzt weg ist . Das Umschalten der Ansicht verspottet den Anwendungsfall eines mehrteiligen Formulars.


Wenn dies beabsichtigt ist, sehe ich keinen Grund dafür. Wir erstellen eine Ansicht, in der wir ein Datenformularmodell zur Ansicht schreiben. Die Aktion des Lesens aus dem Modell sollte meines Wissens keine Validatoren auslösen. Aus meiner Sicht sollten Validatoren ausgeführt werden, wenn die FormControl Instanzen im Modell erstellt werden. _Warum werden Validatoren ausgelöst, wenn sich der Wert nicht geändert hat?_

Umfeld

<br i="34"/>
Angular version: 4.3.6<br i="35"/>
<!-- Check whether this is still an issue in the most recent Angular version -->
P4 forms validators medium confirmed triage #1 bufix

Hilfreichster Kommentar

Ja klingt richtig.
Eine Änderung der Ansicht sollte sich in reaktiven Formularen nicht auf das Modell auswirken und keine Änderung am Modell sollte keine Validierung auslösen.

Ich habe es auf https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104 gepinnt

Es führt immer einen neuen Validierungslauf durch ( updateValueAndValidity() ), während dies nur dann erfolgen sollte, wenn durch die Kontrolldirektive neue Validatoren eingeführt wurden.

Auch das Umbenennen der Funktion in addControlDirective() kann die Verwirrung über ihre Funktionsweise verringern.

Kann irgendwie mit #14376 verwandt sein, es geht sowohl darum, die Ansicht in einem reaktiven Formular zu bearbeiten, als auch so, als ob FormGroupDirective schuld ist.

>Alle Kommentare

Ja klingt richtig.
Eine Änderung der Ansicht sollte sich in reaktiven Formularen nicht auf das Modell auswirken und keine Änderung am Modell sollte keine Validierung auslösen.

Ich habe es auf https://github.com/angular/angular/blob/17eaef0311990e1a06c028f19bc6c63dcd775f31/packages/forms/src/directives/reactive_directives/form_group_directive.ts#L98 -L104 gepinnt

Es führt immer einen neuen Validierungslauf durch ( updateValueAndValidity() ), während dies nur dann erfolgen sollte, wenn durch die Kontrolldirektive neue Validatoren eingeführt wurden.

Auch das Umbenennen der Funktion in addControlDirective() kann die Verwirrung über ihre Funktionsweise verringern.

Kann irgendwie mit #14376 verwandt sein, es geht sowohl darum, die Ansicht in einem reaktiven Formular zu bearbeiten, als auch so, als ob FormGroupDirective schuld ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen