Depois de atualizar para RC5, começamos a receber este erro:
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>
Parece que no RC5 os dois não podem mais ser usados juntos, mas não consegui encontrar uma solução alternativa.
Aqui está o componente que produz a exceção:
<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>
angular
angular2-forms
angular2-formbuilder
user2363245
fonte
fonte
FormsModule
eReactiveFormsModule
?Respostas:
A resposta está certa na mensagem de erro, você precisa indicar que é autônomo e, portanto, não entra em conflito com os controles do formulário:
fonte
Support for using the ngModel input property and ngModelChange event with reactive form directives has been deprecated in Angular v6 and will be removed in Angular v7.
https://next.angular.io/api/forms/FormControlName#use-with-ngmodelExpandindo a resposta de @Avenir Çokaj
Mesmo sendo um novato, não entendi claramente a mensagem de erro no início.
O que a mensagem de erro indica é que em seu formGroup você tem um elemento que não é contabilizado em seu formControl. (Intencionalmente / acidentalmente)
Se você pretende não validar este campo, mas ainda deseja usar o ngModel neste elemento de entrada, adicione o sinalizador para indicar que ele é um componente independente sem a necessidade de validação, conforme mencionado por @Avenir acima.
fonte
OK, finalmente consegui funcionar: consulte https://github.com/angular/angular/pull/10314#issuecomment-242218563
Em resumo, você não pode mais usar o
name
atributo em umformGroup
e deve usar em seuformControlName
lugarfonte
quando você escreve formcontrolname Angular 2 não aceita. Você tem que escrever formControlName . trata-se de segundas palavras em maiúsculas.
se o erro ainda persistir, tente definir o controle do formulário para todos os campos do objeto (meuObjeto).
entre o início,
<form> </form>
por exemplo:<form [formGroup]="myForm" (ngSubmit)="submitForm(myForm.value)"> set form control for all input field </form>.
fonte
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>
fonte
Eu precisava saber por que isso estava acontecendo em um determinado componente e não em qualquer outro componente.
O problema era que eu tinha 2 formulários em um componente e o segundo formulário ainda não tinha
[formGroup]
e ainda não estava registrado, pois ainda estava criando os formulários.Fui em frente e completei escrevendo os dois formulários completos sem deixar uma entrada não registrada que resolva o problema.
fonte
Acabei de receber este erro porque não incluí todos os meus controles de formulário em a
div
com umformGroup
atributo.Por exemplo, isso gerará um erro
Isso pode ser muito fácil de perder se for um formulário particularmente longo.
fonte
Se você deseja usar
[formGroup]
comformControlName
, deve substituir oname
atributo porformControlNameformControlName
.Exemplo:
Isso não funciona porque usa o atributo
[formGroup]
ename
.Você deve substituir o
name
atributo porformControlName
e ele funcionará bem assim:fonte
Parece que você está usando ngModel no mesmo campo de formulário que formControlName. O suporte para usar a propriedade de entrada ngModel e o evento ngModelChange com diretivas de formulário reativas foi descontinuado no Angular v6 e será removido no Angular v7
fonte
Este erro aparece quando você tem alguns controles de formulário (como Inputs, Selects, etc) em suas tags de grupo de formulários sem a propriedade formControlName.
Esses exemplos geram o erro:
Existem duas maneiras, a autônoma:
Ou incluindo-o no grupo de formulários
O último implica em defini-los no formulário de inicialização do Grupo
fonte