Si está utilizando módulos de material de Angular es posible que se encuentre con el error mat-form-field must contain a MatFormFieldControl
al utilizar MatFormFieldModule
.
Este error se produce cuando no has añadido un control de campo de formulario a tu campo de formulario.
¿qué son los controles de campo de formulario?
Los elementos nativos como <input>
o <textarea>
que se colocan dentro de mat-form-field
actúan como controles de campo de formulario
Si su mat-form-field
contiene un <input>
o <textarea>
asegúrese de haber añadido la directiva matInput
y de haber importado MatInputModule
, de lo contrario obtendrá el error mat-form-field must contain a MatFormFieldControl
en su aplicación.
Y otros componentes que pueden actuar como un control de campo de formulario incluyen <mat-select>
, <mat-chip-list>
y cualquier control de campo de formulario personalizado que hayas creado.
Arreglando el error de mat-form-field must contain a MatFormFieldControl
.
Para solucionar el error, añada MatInputModule
y MatFormFieldModule
dentro de un módulo necesario o app.module.ts
O como se explica en Angular material tutorial añadir todos los módulos de material en un módulo común y añadirlo al archivo app.module.ts
para que podamos utilizarlos en toda la aplicación
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";
@NgModule({
imports: [
MatFormFieldModule,
MatInputModule
]
})
export class AppModule { }
Y a continuación asegúrate de haber añadido la directiva matInput
al control mat-form-field
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input placeholder="Name">
</mat-form-field>
El código anterior arroja un error porque no hemos añadido la directiva matInput
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matInput placeholder="Name">
</mat-form-field>
Y matInput
distingue entre mayúsculas y minúsculas
Así que si tiene un error ortográfico en matInput
o mayúsculas (MatInput
) o minúsculas (matinput
) en matInput
, todavía se encontrará con el error.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matinput placeholder="Name">
</mat-form-field>
mat-form-field
la entrada de control no debe contener *ngIf
Si está utilizando *ngIf
en el control mat-form-field, es decir, <input>
obtendrá el error mat-form-field must contain a MatFormFieldControl
.
El siguiente código no funcionará.
<mat-form-field>
<mat-label>Input</mat-label>
<input matInput *ngIf="condition"/>
</mat-form-field>
En lugar de eso, debe utilizar *ngIf
en el elemento mat-form-field
.
<mat-form-field *ngIf="condition">
<mat-label>Input</mat-label>
<input matInput />
</mat-form-field>
Resumen
Para solucionar el error de mat-form-field must contain a MatFormFieldControl
siga los siguientes pasos
- Importar
MatInputModule
yMatFormFieldModule
- Añada la directiva
matInput
al controlmat-form-field
. Es decir,input
otextarea
- Compruebe la ortografía de
matInput
. - No utilice
*ngIf
en el controlmat-form-field
sino en el elementomat-form-field