Después de actualizar a RC5, comenzamos a recibir este error:
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 en RC5 los dos ya no se pueden usar juntos, pero no pude encontrar una solución alternativa.
Aquí está el componente que produce la excepción:
<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
usuario2363245
fuente
fuente
FormsModule
yReactiveFormsModule
?Respuestas:
La respuesta está correcta en el mensaje de error, debe indicar que es independiente y, por lo tanto, no entra en conflicto con los controles del formulario:
fuente
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-ngmodelAmpliando la respuesta de @Avenir Çokaj
Siendo un novato, incluso yo no entendí claramente el mensaje de error al principio.
Lo que indica el mensaje de error es que en su formGroup tiene un elemento que no se tiene en cuenta en su formControl. (Intencionalmente / accidentalmente)
Si tiene la intención de no validar este campo pero aún desea usar ngModel en este elemento de entrada, agregue la marca para indicar que es un componente independiente sin necesidad de validación como se menciona en @Avenir anteriormente.
fuente
Bien, finalmente lo hice funcionar: consulte https://github.com/angular/angular/pull/10314#issuecomment-242218563
En resumen, ya no puede usar
name
atributos dentro de aformGroup
, y debe usarformControlName
en su lugarfuente
cuando escribe formcontrolname Angular 2 no acepta. Tienes que escribir formControlName . se trata de segundas palabras en mayúscula.
si el error aún continúa, intente establecer el control de formulario para todo el campo del objeto (myObject).
entre inicio
<form> </form>
por ejemplo:<form [formGroup]="myForm" (ngSubmit)="submitForm(myForm.value)"> set form control for all input field </form>.
fuente
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>
fuente
Necesitaba saber por qué sucedía esto en un determinado componente y no en ningún otro componente.
El problema era que tenía 2 formularios en un componente y el segundo formulario aún no
[formGroup]
estaba registrado ni estaba registrado ya que todavía estaba creando los formularios.Seguí adelante y terminé de escribir ambos formularios completos sin dejar una entrada no registrada que resuelva el problema.
fuente
Recibí este error porque no incluí todos mis controles de formulario dentro de
div
unformGroup
atributo.Por ejemplo, esto arrojará un error
Esto puede ser bastante fácil de pasar por alto si es una forma particularmente larga.
fuente
Si desea utilizar
[formGroup]
conformControlName
, debe reemplazar elname
atributo conformControlNameformControlName
.Ejemplo:
Esto no funciona porque usa el atributo
[formGroup]
yname
.Debe reemplazar el
name
atributo porformControlName
y funcionará bien de la siguiente manera:fuente
Parece que está usando ngModel en el mismo campo de formulario que formControlName. El soporte para usar la propiedad de entrada ngModel y el evento ngModelChange con directivas de formulario reactivo ha quedado obsoleto en Angular v6 y se eliminará en Angular v7
fuente
Este error aparece cuando tiene algunos controles de formulario (como Entradas, Selecciones, etc.) en sus etiquetas de grupo de formulario sin la propiedad formControlName.
Esos ejemplos arrojan el error:
Hay dos formas, la independiente:
O incluirlo en el grupo de formularios
El último implica definirlos en el formulario de inicialización Grupo
fuente