Om du använder Angular-materialmoduler kan du ha stött på mat-form-field must contain a MatFormFieldControl fel när du använder MatFormFieldModule.
Felet uppstår när du har missat att lägga till en formulärfältskontroll i ditt formulärfält.
Vad är formulärfältskontroller?
De ursprungliga elementen som <input> eller <textarea>som placeras på mat-form-field fungerar som kontroller för formulärfält
Om din mat-form-field innehåller en <input> eller <textarea> element, se till att du har lagt till matInput -direktivet och importerat MatInputModule, annars kommer du att få felet mat-form-field must contain a MatFormFieldControl i din applikation.
Andra komponenter som kan fungera som kontroll för formulärfält är följande <mat-select>, <mat-chip-list> och alla anpassade formulärfältskontroller som du har skapat.
Rätta mat-form-field must contain a MatFormFieldControl fel.
För att åtgärda felet lägger du till MatInputModule och MatFormFieldModule i en nödvändig modul eller app.module.ts
Eller så som förklaras i Angular material tutorial lägger du till alla materialmoduler i en gemensam modul och lägger till den i filen app.module.ts så att vi kan använda dem i hela programmet
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";
@NgModule({
    imports: [
        MatFormFieldModule,
        MatInputModule
    ]
})
export class AppModule { }
Se sedan till att du har lagt till matInput -direktivet i mat-form-field -kontrollen.
<mat-form-field appearance="fill">
  <mat-label>Input</mat-label>
  <input placeholder="Name">
</mat-form-field>
Ovanstående kod ger upphov till ett fel eftersom vi inte har lagt till direktivet matInput.
<mat-form-field appearance="fill">
  <mat-label>Input</mat-label>
  <input matInput placeholder="Name">
</mat-form-field>
Och matInput är skiftlägeskänslig
Så om du har ett stavfel i matInput eller om du har stora bokstäver(MatInput) eller små bokstäver(matinput) i matInput, kommer du ändå att få ett fel.
<mat-form-field appearance="fill">
  <mat-label>Input</mat-label>
  <input matinput placeholder="Name">
</mat-form-field>
mat-form-field kontrollinmatningen får inte innehålla *ngIf
Om du använder *ngIf på mat-form-field-kontrollen, dvs, <input> får du felet mat-form-field must contain a MatFormFieldControl.
Nedanstående kod kommer inte att fungera.
<mat-form-field>
  <mat-label>Input</mat-label>
  <input matInput *ngIf="condition"/>
</mat-form-field>
Istället bör du använda *ngIf på elementet mat-form-field.
<mat-form-field *ngIf="condition">
  <mat-label>Input</mat-label>
  <input matInput />
</mat-form-field>
Sammanfattning
För att åtgärda felet mat-form-field must contain a MatFormFieldControl följer du nedanstående steg
- Importera 
MatInputModuleochMatFormFieldModule - Lägg till 
matInput-direktivet imat-form-field-kontrollen, dvs.inputellertextarea - Kontrollera stavningen av 
matInput. - Använd inte 
*ngIfpåmat-form-field-kontrollen utan påmat-form-field-elementet 
