2016-09-20 3 views
8

Versuch zu verstehen, was der Parameter 'onlySelf' bei der Übergabe an setValue tut.Angular 2 - FormControl setValue Parameter 'onlySelf'

this.form.get('name').setValue('', { onlySelf: true }) 

Die Dokumentation sagt: „Wenn onlySelf wahr ist, nur diese Änderung die Validierung dieses Formcontrol auswirken wird und nicht ihre Mutter Komponente Voreingestellt ist false..“

Allerdings habe ich Mühe, dies zu verstehen. Immer noch ziemlich neu in den modellbasierten Formen der Using Angulars.

Antwort

13

Standardmäßig prüft Angular2 standardmäßig die Formularsteuerung/Formulargruppengültigkeit bis zur obersten Ebene, wenn ein Formularelementwert aktualisiert wird, es sei denn, Sie sagen nein. onlySelf ist das Tool, das Ihnen dabei hilft.

Sagen Sie bitte eine loginForm haben, die ein username Feld und ein password Feld hat, sind beide erforderlich, wie folgt aus:

this.userNameControl = this.formBuilder.control('Harry', Validators.required); 
this.passwordControl = this.formBuilder.control('S3cReT', Validators.required); 
this.loginForm = this.formBuilder.group({ 
    userName: this.userNameControl, 
    password: this.passwordControl 
}); 

Nach diesem Code this.loginForm.valid ist 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 diese:

this.passwordControl.setValue(''); 

wird in

this.passwordControl.valid === false 
this.loginForm.valid === false 

führen jedoch dies:

this.passwordControl.setValue('', { onlySelf: true }); 

wird passwordControl ‚s nur Gültigkeit nur ändern:

this.passwordControl.valid === false 
this.loginForm.valid === true 
2

Put So sagen wir das Sie haben ein Formular mit dem Namen mainForm, das ist gültig. Es hat vier Steuerelemente und alle vier haben einen Wert. Jetzt entscheiden Sie, den Wert eines Ihrer Steuerelemente zu aktualisieren. Angenommen, Sie aktualisieren es auf einen falschen Wert und 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 es ist ungültiger Status sollte das Formular nicht übergeben werden zulassen. Da die gültige Form der Formulare jedoch "true" meldet, senden Sie inkonsistente Werte an das Back-End.

Es könnte verwirrend sein, warum Sie diese Eigenschaft haben, aber es kann Situationen geben, in denen 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ß.

Verwandte Themen