[ ] 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
Wenn die einem Formularsteuerelement zugeordnete Direktive in der Ansicht erstellt wird, werden Validatoren ausgelöst.
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 .
https://stackblitz.com/edit/angular-reactive-forms-issue?file=app/app.component.ts
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?_
<br i="34"/>
Angular version: 4.3.6<br i="35"/>
<!-- Check whether this is still an issue in the most recent Angular version -->
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.
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.