2017-07-18 9 views
1

Wir haben uns überlegt, eine asynchrone custom validator für ein Formular mit dem einzigen Zweck der Kommunikation mit einem Microservice zu implementieren, um Informationen aus einer Person ID-Nummer (wie Alter, Geburtsdatum, Geschlecht , Rennen, usw.) und natürlich, ob die ID-Nummer gültig ist oder nicht, basierend auf dem Land, durch das sie gesendet werden.Angular 2 - Reaktive Form Asynchrone Validierung mit Microservice

Wenn also eine Person ihre ID-Nummer eingibt und ein Land auswählt, wird eine Anforderung an einen Microservice abgefeuert, und wenn sie beispielsweise ihr Geschlecht nicht festgelegt hat, füllt sie es automatisch auf, worauf sie es später ändern kann wenn nötig. auf das folgende Szenario

Fragen

  1. Ist es gut/OK Praxis nach Art Steuerwerte in einem Prüfer zu setzen?
  2. Wenn ja, wie würde ich die anderen Formularsteuerwerte ändern?

Jede Hilfe würde geschätzt :)

+1

Ein Validator nie irgendwelche Werte eines Formulars setzen sollte, sollte es nur bestätigen. – Chrillewoodz

Antwort

1

Wie ich im Kommentar sagte, sollte ein Validator nie einen Wert eines Formularsteuer, Gruppe oder Array gesetzt oder aktualisieren. Es sollte nur validiert werden.

Was Sie jedoch tun können, ist die .valueChanges verwenden, um Änderungen an das Formular zu hören, und in der Callback-Prüfung, ob ein bestimmtes Steuerelement gültig ist oder nicht, ein anderes Steuerelement entsprechend aktualisieren.

Hier ist ein Beispiel:

this.form.get('someControl').valueChanges(() => { 

    if (this.form.get('someControl').valid) { 
    this.form.get('someOtherControl').setValue(true); 
    } 
}); 
+0

Aus Neugier, ist es irgendwo dokumentiert, dass es verpönt ist, Logik wie diese in einem Validator hinzuzufügen, da es ein ziemlich ungewöhnliches Szenario ist? Es macht Sinn, dass Sie die Logik komplett trennen, aber wahrscheinlich wird am Ende Ihre Antwort als richtig markieren –

+1

Nicht, dass ich bewusst bin, aber der Name selbst macht es ziemlich klar. Und ich denke, es ist irgendwo im offiziellen Stilführer erwähnt, dass Sie "reine" Funktionen erstellen sollten, was bedeutet, dass sie keine Nebenwirkungen haben. Eine Validator-Funktion, die ein anderes Steuerelement ändert, würde dieses Muster unterbrechen, daher sollte es nur validieren und dann würden Sie die andere Sache woanders machen. – Chrillewoodz

+0

Ja macht Sinn, danke für die schnelle Rückmeldung Kumpel :) –

Verwandte Themen