Aquí está mi componente en Angular 4:
@Component( {
selector: 'input-extra-field',
template: `
<div class="form-group" [formGroup]="formGroup" >
<switch [attr.title]="field.etiquette"
[attr.value]="field.valeur" [(ngModel)]="field.valeur"
[formControl]="fieldControl" [attr.id]="name" [attr.disabled]="disabled">
</switch>
<error-messages [control]="name"></error-messages>
</div>
`
} )
Aquí está mi clase:
export class SwitchExtraField extends ExtraField {
@Input() field: ExtraFormField;
@Input() entity: { fields: Object };
@Input() formGroup: FormGroup;
constructor( formDir: NgForm ) {
super( null, null, formDir );
}
get disabled(): string {
if ( this.field && !!this.field.saisissable && !this.field.saisissable ) {
return 'disabled';
}
return null;
}
}
Este es el error que obtengo al compilar:
ERROR Error: No value accessor for form control with unspecified name attribute
at _throwError (forms.es5.js:1918)
at setUpControl (forms.es5.js:1828)
at FormControlDirective.webpackJsonp.../../../forms/@angular/forms.es5.js.FormControlDirective.ngOnChanges (forms.es5.js:4617)
Cuando cambio el interruptor de elemento a entrada, funciona, sabiendo que estoy usando la misma estructura para otros componentes y funciona bien.
angular
form-control
demandar
fuente
fuente
ControlValueAccessor
- Nunca más se confunda al implementar ControlValueAccessor en formas angularesRespuestas:
Solucioné este error agregando los
name="fieldName" ngDefaultControl
atributos al elemento que lleva el[(ngModel)]
atributo.fuente
ngDefaultControl
, por ejemplo?name="fieldname"
no es necesario, perongDefaultControl
cura el problema.Tuve el mismo problema y el problema fue que mi componente secundario tenía un
@input
nombreformControl
.Así que solo necesitaba cambiar de:
a:
ts:
fuente
También recibí este error al escribir un componente de control de formulario personalizado en Angular 7. Sin embargo, ninguna de las respuestas es aplicable a Angular 7.
En mi caso, era necesario agregar lo siguiente al
@Component
decorador:Este es un caso de "No sé por qué funciona, pero funciona". Atribuya a un diseño / implementación deficiente por parte de Angular.
fuente
También tuve el mismo error, angular 7
Acabo de agregar ngDefaultControl
fuente
Tuve este mismo error: accidentalmente enlacé [(ngModel)] a mi en
mat-form-field
lugar delinput
elemento.fuente
Recibí este mensaje de error en mis pruebas unitarias con Jasmine. Añadí ngDefaultControl atributo al elemento de medida (en mi caso se trataba de un conmutador deslizante de material angular) y esto resuelve el error.
Cambie el elemento anterior para incluir el atributo ngDefaultControl
fuente
En mi caso, había insertado [(ngModel)] en la etiqueta en lugar de la entrada. También hay una advertencia, intenté ejecutar correctamente el error anterior en la línea especificada, pero el error no desapareció. Si hay otros lugares donde ha cometido el mismo error, todavía le arroja el mismo error en la misma línea.
fuente
Me enfrentaba a este error mientras ejecutaba los casos de prueba de la unidad de karma. Agregar MatSelectModule en las importaciones soluciona el problema
fuente
Esto es algo estúpido, pero recibí este mensaje de error al usar accidentalmente en
[formControl]
lugar de[formGroup]
. Mira aquí:INCORRECTO
@Component({ selector: 'app-application-purpose', template: ` <div [formControl]="formGroup"> <!-- '[formControl]' IS THE WRONG ATTRIBUTE --> <input formControlName="formGroupProperty" /> </div> ` }) export class MyComponent implements OnInit { formGroup: FormGroup constructor( private formBuilder: FormBuilder ) { } ngOnInit() { this.formGroup = this.formBuilder.group({ formGroupProperty: '' }) } }
CORRECTO
@Component({ selector: 'app-application-purpose', template: ` <div [formGroup]="formGroup"> <!-- '[formGroup]' IS THE RIGHT ATTRIBUTE --> <input formControlName="formGroupProperty" /> </div> ` }) export class MyComponent implements OnInit { formGroup: FormGroup constructor( private formBuilder: FormBuilder ) { } ngOnInit() { this.formGroup = this.formBuilder.group({ formGroupProperty: '' }) } }
fuente
En mi caso, usé la directiva, pero no la había importado en mi archivo module.ts. Importar lo arregló.
fuente
ng serve
para actualizar la importaciónTuve este mismo error, tenía un campo de entrada nombrado
control
en mi Componente de formulario personalizado pero accidentalmente pasaba el control en la entrada nombradaformControl
. Espero que nadie enfrente ese problema.fuente
En mi caso fue tan tonto como haber registrado el nuevo componente para DI en mis
app.module.ts
declaraciones pero no en las exportaciones.fuente
En mi caso, está sucediendo en mi módulo compartido y tuve que agregar lo siguiente en @NgModule:
Pasé muchas horas para que funcionara. Espero que esto ayude a otros a luchar con ese error.
fuente
Tuve el mismo error, pero en mi caso aparentemente fue un problema de sincronización, al momento de renderizar los componentes en html.
Seguí algunas de las soluciones propuestas en esta página, pero ninguna me funcionó, al menos no del todo.
Lo que realmente resolvió mi error fue escribir el siguiente fragmento de código dentro de la etiqueta html padre de los elementos.
Estaba vinculando a la variable.
Código:
El error fue causado, aparentemente porque el proyecto intentaba renderizar la página, aparentemente en el momento de evaluar la variable, el proyecto simplemente no pudo encontrar su valor. Con el fragmento de código anterior, asegúrese de que antes de renderizar la página pregunte si la variable se ha inicializado.
Este es mi código de component.ts:
Aquí está mi marcado html:
Espero que esto pueda ser de ayuda.
fuente
¿Ha intentado mover su
[(ngModel)]
a endiv
lugar deswitch
en su HTML? Tuve el mismo error en mi código y fue porque vinculé el modelo a un en<mat-option>
lugar de a<mat-select>
. Aunque no estoy usando el control de formulario.fuente
En mi caso, era un componente. Miembro que no existía, por ejemplo
Agregarlo a la declaración de clase lo solucionó
fuente
En mi caso, el error se desencadenó al duplicar una importación de un componente en el módulo.
fuente
#Antecedentes
En mi caso, el error se desencadenó al cambiar la etiqueta del elemento de a por error. Dentro de <TextView an [(ngModel)] = "nombre". Fue definido.
Después de eliminar [(ngModel)] = el error "nombre" desapareció.
fuente
en mi caso, tenía una
<TEXTAREA>
etiqueta de html antiguo mientras convertía a angular. Tuve que cambiar a<textarea>
.fuente