Ak používate moduly Angular material, mohli ste sa stretnúť s chybou mat-form-field must contain a MatFormFieldControl
pri používaní MatFormFieldModule
.
Táto chyba sa vyskytne, ak ste do formulárového poľa zabudli pridať ovládací prvok.
čo sú ovládacie prvky formulárového poľa?
Natívne prvky ako napr <input>
alebo <textarea>
, ktoré sú umiestnené vo vnútri stránky mat-form-field
, fungujú ako ovládacie prvky formulárového poľa
Ak vaša stránka mat-form-field
obsahuje <input>
alebo <textarea>
prvok, uistite sa, že ste k nemu pridali direktívu matInput
a importovali MatInputModule
, inak sa vám v aplikácii zobrazí chyba mat-form-field must contain a MatFormFieldControl
.
A medzi ďalšie komponenty, ktoré môžu fungovať ako ovládací prvok poľa formulára, patrí <mat-select>
, <mat-chip-list>
a všetky vlastné ovládacie prvky polí formulára, ktoré ste vytvorili.
Oprava chyby mat-form-field must contain a MatFormFieldControl
.
Ak chcete chybu opraviť, pridajte MatInputModule
a MatFormFieldModule
do potrebného modulu alebo app.module.ts
Alebo ako je vysvetlené v Angular material tutorial, pridajte všetky materiálové moduly do spoločného modulu a pridajte ho do súboru app.module.ts
, aby sme ich mohli používať v celej aplikácii
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";
@NgModule({
imports: [
MatFormFieldModule,
MatInputModule
]
})
export class AppModule { }
A ďalej sa uistite, že ste do ovládacieho prvku mat-form-field
pridali smernicu matInput
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input placeholder="Name">
</mat-form-field>
Vyššie uvedený kód vyhodí chybu, pretože sme nepridali direktívu matInput
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matInput placeholder="Name">
</mat-form-field>
A matInput
rozlišuje veľké a malé písmená
Takže ak máte pravopisnú chybu v matInput
alebo veľké písmená(MatInput
) alebo malé písmená(matinput
) v matInput
, aj tak sa stretnete s chybou.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matinput placeholder="Name">
</mat-form-field>
Kontrolný vstup mat-form-field
by nemal obsahovať *ngIf
Ak používate *ngIf
na ovládacom prvku mat-form-field t.j., <input>
tag, dostanete chybu mat-form-field must contain a MatFormFieldControl
.
Nižšie uvedený kód nebude fungovať.
<mat-form-field>
<mat-label>Input</mat-label>
<input matInput *ngIf="condition"/>
</mat-form-field>
Namiesto toho by ste mali použiť *ngIf
na prvku mat-form-field
.
<mat-form-field *ngIf="condition">
<mat-label>Input</mat-label>
<input matInput />
</mat-form-field>
Zhrnutie
Ak chcete opraviť chybu mat-form-field must contain a MatFormFieldControl
, postupujte podľa nasledujúcich krokov
- Importujte stránky
MatInputModule
aMatFormFieldModule
- Pridajte smernicu
matInput
do ovládacieho prvkumat-form-field
. t. j.input
alebotextarea
- Skontrolujte pravopis
matInput
. - Nepoužívajte
*ngIf
na ovládacom prvkumat-form-field
, namiesto toho ho použite na prvkumat-form-field