2017-08-25 1 views
1

Est-il possible d'ajouter un seul validateur à un groupe de formulaire, qui est appelé dès qu'une seule valeur à l'intérieur du formulaireGroupe change?Formes angulaires: valider un groupe de formulaires complet si une seule valeur change

je pense qu'il devrait ressembler à ceci:

'group': this.formBuilder.group({ 
    'value1': [''], 
    'value2': [''], 
    'value3': [''] 
    }, [MyCustomValidator]), 

mais le validateur n'est pas invoqué sur les changements qui se produisent à l'intérieur du formGroup, ... je peux ajouter le validateur à chaque champ individuellement, puis appeler le control.parent (ce qui fonctionne), mais cela ne semble pas être une bonne solution.

Répondre

1

De cette façon d'utiliser le validateur, il est tiré chaque valeur1 de temps et valeur2 obtenir leurs valeurs ont changé:

this.fb.group({ 
      value1: ['', [this.validateService.isNumber]], 
      value2: ['', [this.validateService.isNumber, this.validateService.isLessThanHundred]], 
     }, { validator: this.validateService.countInputs }); 

plunker

+1

thx, n'a pas pensé à cela, je dois évaluer chaque domaine de sorte que l'évaluation du groupe est également lancée, mais maintenant que je le vois, il est tout à fait logique – Nickolaus

0

Vous pouvez utiliser l'interface OnChanges à partir de l'angle.

ngOnChanges(changes: SimpleChanges){ 
    // call the validation method 
    // this.formBuilder.group.valid property 
} 

Pour plus de détails documentation, s'il vous plaît cliquez here OU utilisation AfterViewChecked de here

ngAfterViewChecked() { 
this.formBuilder.group.valueChanges.subscribe(()=> { 
    //do whatever you want; eg: enable the save or update button 
}); 
} 

S'il vous plaît cliquer here pour les crochets du cycle de vie angulaire.

+0

cela peut être une option, mais il semble un peu hacky, la solution de @Vega est la façon officielle d'aller – Nickolaus