Après la mise à niveau vers RC5, nous avons commencé à avoir cette erreur:
ngModel cannot be used to register form controls with a parent formGroup directive. Try using
formGroup's partner directive "formControlName" instead. Example:
<div [formGroup]="myGroup">
<input formControlName="firstName">
</div>
In your class:
this.myGroup = new FormGroup({
firstName: new FormControl()
});
Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:
Example:
<div [formGroup]="myGroup">
<input formControlName="firstName">
<input [(ngModel)]="showMoreControls" [ngModelOptions]="{standalone: true}">
</div>
Il semble que dans RC5, les deux ne puissent plus être utilisés ensemble, mais je ne pouvais pas trouver de solution alternative.
Voici le composant produisant l'exception:
<select class="field form-control" [formGroup]="form" [(ngModel)]="cause.id" [name]="name">
<option *ngFor="let c of causes" [value]="c.text">{{c.text}}</option>
</select>
La réponse est exacte dans le message d'erreur, vous devez indiquer qu'il est autonome et qu'il n'entre donc pas en conflit avec les commandes de formulaire
[ngModelOptions]="{standalone: true}"
Développer la réponse de @Avenir Çokaj
En tant que novice, je n'ai pas compris le message d'erreur clairement au début.
Le message d'erreur indique que, dans votre groupe formG, vous avez un élément qui n'est pas comptabilisé dans votre formulaireControl. (Intentionnellement/accidentellement)
Si vous avez l'intention de ne pas valider ce champ mais que vous souhaitez tout de même utiliser le ngModel sur cet élément d'entrée, ajoutez le drapeau pour indiquer qu'il s'agit d'un composant autonome sans nécessiter de validation, comme mentionné par @Avenir plus haut.
OK, enfin, ça marche: voir https://github.com/angular/angular/pull/10314#issuecomment-242218563
En bref, vous ne pouvez plus utiliser l'attribut name
dans une formGroup
et vous devez utiliser formControlName
à la place.
lorsque vous écrivez formcontrolname Angular 2, n'acceptez pas. Vous devez écrire formControlName . il s'agit de seconds mots en majuscules.
<input type="number" [(ngModel)]="myObject.name" formcontrolname="nameFormControl"/>
si l'erreur persiste, essayez de définir le contrôle de formulaire pour tout le champ objet (myObject).
entre start <form> </form>
par exemple: <form [formGroup]="myForm" (ngSubmit)="submitForm(myForm.value)"> set form control for all input field </form>.
import { FormControl, FormGroup, AbstractControl, FormBuilder, Validators } from '@angular/forms';
this.userInfoForm = new FormGroup({
userInfoUserName: new FormControl({ value: '' }, Validators.compose([Validators.required])),
userInfoName: new FormControl({ value: '' }, Validators.compose([Validators.required])),
userInfoSurName: new FormControl({ value: '' }, Validators.compose([Validators.required]))
});
<form [formGroup]="userInfoForm" class="form-horizontal">
<div class="form-group">
<label class="control-label"><i>*</i> User Name</label>
<input type="text" formControlName="userInfoUserName" class="form-control" [(ngModel)]="userInfo.userName">
</div>
<div class="form-group">
<label class="control-label"><i>*</i> Name</label>
<input type="text" formControlName="userInfoName" class="form-control" [(ngModel)]="userInfo.name">
</div>
<div class="form-group">
<label class="control-label"><i>*</i> Surname</label>
<input type="text" formControlName="userInfoSurName" class="form-control" [(ngModel)]="userInfo.surName">
</div>
</form>
Si le composant a plus d'une forme, enregistrez tous les contrôles et toutes les formes
J'avais besoin de savoir pourquoi cela se produisait dans un certain composant et non dans aucun autre.
Le problème était que j'avais 2 formulaires dans un composant et que le second formulaire n'avait pas encore [formGroup]
et n'était pas encore enregistré car je construisais encore les formulaires.
Je suis allé de l'avant et j'ai terminé la rédaction complète des deux formulaires sans laisser une entrée non enregistrée qui résolve le problème.
Je viens de recevoir cette erreur parce que je n'ai pas inclus tous mes contrôles de formulaire dans une variable div
avec un attribut formGroup
.
Par exemple, cela jettera une erreur
<div [formGroup]='formGroup'>
</div>
<input formControlName='userName' />
Cela peut être assez facile à manquer si sa forme est particulièrement longue.
Si vous souhaitez utiliser [formGroup] avec formControlName, vous devez remplacer name
attribut par formControlNameformControlName
.
Exemple:
Cela ne fonctionne pas car il utilise [formGroup]
et name
attribut
<div [formGroup]="myGroup">
<input name="firstName" [(ngModel)]="firstName">
</div>
vous devez remplacer name
attribut par formControlNameformControlName
et cela fonctionnera normalement comme suit:
<div [formGroup]="myGroup">
<input formControlName="firstName" [(ngModel)]="firstName">
</div>