2017-01-31 3 views
2

Ich habe eine Bankdarlehen-Anwendung, die aus einer Vielzahl von Eingabefeldern besteht, von denen einige ausgeblendet sind (die ausgeblendeten Felder werden dynamisch basierend auf einer Reihe von Contidions angezeigt). Wenn Sie z. B. Option 1 wählen, wird ein verstecktes Feld angezeigt, und einige andere Felder sind ausgeblendet. Wenn Sie Option 2 wählen, werden einige Felder angezeigt, andere Felder werden ausgeblendet. Am Ende des Formulars habe ich a, was bedeutet, dass der Button deaktiviert wird, bis das ganze Formular gültig ist, aber mein Problem ist jetzt, dass die versteckten Felder auch validiert werden, so dass das Formular niemals gültig sein wird. Gibt es eine Möglichkeit, eckigen Feldern zu sagen, Felder nicht zu validieren, wenn sie ausgeblendet sind?Angular 2 Form Validierung auf versteckte Felder

Die Art, wie ich meine Felder verstecken ist wie im folgenden Beispiel:

<form [formGroup]="form"> 

<select formControlName="loanType"> 
<option value="0">Car loan</option> 
<option value="1">Student loan</option> 
</select> 

<div *ngIf="loanType === 0"> 
<input type="text" required> 
</div> 

<div *ngIf="loanType === 1"> 
<input type="text" required> 
</div> 

<button type="submit" [disabled]="!form.isValid"> 

</form> 
+0

Welche Formularsyntax verwenden Sie: vorlagengesteuerte Formulare oder modellgesteuerte Formulare? Für ein modellgesteuertes Formular würde ich sagen, dass das Ausblenden des Felds in der Vorlage nicht ausreicht. Außerdem müssen Sie das Modell (in der Komponentenklasse) aktualisieren. Sie können eine Methode wie [AbstractControl.clearValidators()] (https://angular.io/docs/ts/latest/api/forms/index/AbstractControl-class.html#clearValidators-anchor) verwenden, um die Validatoren von ein spezifisches Feld. – AngularChef

+0

(Randnotiz: Sie "verstecken" nicht nur die Felder mit '* ngIf', Sie entfernen sie tatsächlich aus dem DOM.) – AngularChef

+1

Schauen Sie sich diesen Blog an: https://scotch.io/tutorials/ how-to-implement-conditional-validation-in-eckig-2-modell-getriebene-formen – Yaser

Antwort

2

UPDATE:

einige der Forschung Nachdem ich, ich fand, dass ich dynamisch den formGroup von FormGroup.addControl mit (aktualisieren müssen) und FormGroup.removeControl().

Die Artikel las ich zu meinem Abschluss kommen sollten: https://github.com/angular/angular/issues/7970 (check Antwort Karas)

https://scotch.io/tutorials/how-to-implement-conditional-validation-in-angular-2-model-driven-forms

nur ein Beispiel zu geben, was mein Code sieht für den nächsten Mann mit dem gleichen Problem :

if (this.loanTypeId === 1) { 
    this.form.addControl('name', new FormControl("", Validators.required)); 
} else { 
    this.form.removeControl('name') 
} 
Verwandte Themen