Pokud používáte moduly Angular material, mohli jste se setkat s chybou mat-form-field must contain a MatFormFieldControl
při použití MatFormFieldModule
.
K této chybě dochází v případě, že jste opomněli přidat do formulářového pole ovládací prvek.
co jsou ovládací prvky formulářového pole?
Nativní prvky jako např <input>
nebo <textarea>
, které jsou umístěny uvnitř mat-form-field
, fungují jako ovládací prvky formulářového pole
Pokud vaše stránka mat-form-field
obsahuje např <input>
nebo <textarea>
element, ujistěte se, že jste do něj přidali direktivu matInput
a importovali MatInputModule
, jinak se vám v aplikaci objeví chyba mat-form-field must contain a MatFormFieldControl
.
A mezi další komponenty, které mohou fungovat jako ovládací prvek formulářového pole, patří např <mat-select>
, <mat-chip-list>
a všechny vlastní ovládací prvky formulářových polí, které jste vytvořili.
Oprava chyby mat-form-field must contain a MatFormFieldControl
.
Chcete-li chybu opravit, přidejte stránky MatInputModule
a MatFormFieldModule
uvnitř potřebného modulu nebo app.module.ts
Nebo jak je vysvětleno v Angular material tutorial přidejte všechny materiálové moduly do společného modulu a přidejte je do souboru app.module.ts
, abychom je mohli používat v celé aplikaci
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";
@NgModule({
imports: [
MatFormFieldModule,
MatInputModule
]
})
export class AppModule { }
A dále se ujistěte, že jste do ovládacího prvku mat-form-field
přidali direktivu matInput
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input placeholder="Name">
</mat-form-field>
Výše uvedený kód vyhodí chybu, protože jsme nepřidali direktivu matInput
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matInput placeholder="Name">
</mat-form-field>
A matInput
rozlišuje velká a malá písmena
Takže pokud máte v matInput
pravopisnou chybu nebo v matInput
velká písmena(MatInput
) nebo malá písmena(matinput
) , stejně se setkáte s chybou.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matinput placeholder="Name">
</mat-form-field>
mat-form-field
kontrolní vstup by neměl obsahovat *ngIf
Pokud používáte *ngIf
na ovládacím prvku mat-form-field, tj., <input>
tag, zobrazí se chyba mat-form-field must contain a MatFormFieldControl
.
Níže uvedený kód nebude fungovat.
<mat-form-field>
<mat-label>Input</mat-label>
<input matInput *ngIf="condition"/>
</mat-form-field>
Místo toho byste měli použít *ngIf
na prvku mat-form-field
.
<mat-form-field *ngIf="condition">
<mat-label>Input</mat-label>
<input matInput />
</mat-form-field>
Shrnutí
Chcete-li opravit chybu mat-form-field must contain a MatFormFieldControl
, postupujte podle následujících kroků
- Importujte stránky
MatInputModule
aMatFormFieldModule
- Přidejte direktivu
matInput
do ovládacího prvkumat-form-field
. Tj.input
nebotextarea
- Zkontrolujte pravopis
matInput
. - Nepoužívejte
*ngIf
na ovládacím prvkumat-form-field
, místo toho ji použijte na prvkumat-form-field