Se si utilizzano i moduli material di Angular, si potrebbe aver riscontrato l’errore mat-form-field must contain a MatFormFieldControl
durante l’utilizzo di MatFormFieldModule
.
Questo errore si verifica quando non si è aggiunto un controllo del campo del modulo al campo del modulo.
cosa sono i controlli dei campi modulo?
Gli elementi nativi come <input>
o <textarea>
che si trovano all’interno di mat-form-field
fungono da controlli di campo
Se mat-form-field
contiene un elemento <input>
o <textarea>
assicurarsi di aver aggiunto la direttiva matInput
e di aver importato MatInputModule
, altrimenti si otterrà l’errore mat-form-field must contain a MatFormFieldControl
nell’applicazione.
Altri componenti che possono fungere da controllo del campo del modulo includono <mat-select>
, <mat-chip-list>
e qualsiasi controllo di campo personalizzato creato dall’utente.
Correzione dell’errore mat-form-field must contain a MatFormFieldControl
.
Per risolvere l’errore, aggiungere MatInputModule
e MatFormFieldModule
all’interno di un modulo necessario o app.module.ts
Oppure, come spiegato in tutorial sui materiali Angular, aggiungere tutti i moduli dei materiali in un modulo comune e aggiungerlo al file app.module.ts
, in modo da poterli usare in tutta l’applicazione
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";
@NgModule({
imports: [
MatFormFieldModule,
MatInputModule
]
})
export class AppModule { }
Assicurarsi poi di aver aggiunto la direttiva matInput
al controllo mat-form-field
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input placeholder="Name">
</mat-form-field>
Il codice precedente genera un errore perché non è stata aggiunta la direttiva matInput
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matInput placeholder="Name">
</mat-form-field>
E matInput
è sensibile alle maiuscole
Quindi, se si commette un errore ortografico in matInput
o si scrive in maiuscolo (MatInput
) o in minuscolo (matinput
) in matInput
, si verificherà comunque l’errore.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matinput placeholder="Name">
</mat-form-field>
L’input di controllo mat-form-field
non deve contenere *ngIf
Se si utilizza *ngIf
sul controllo mat-form-field, cioè, <input>
si otterrà l’errore mat-form-field must contain a MatFormFieldControl
.
Il codice seguente non funziona.
<mat-form-field>
<mat-label>Input</mat-label>
<input matInput *ngIf="condition"/>
</mat-form-field>
Al suo posto si dovrebbe usare *ngIf
sull’elemento mat-form-field
.
<mat-form-field *ngIf="condition">
<mat-label>Input</mat-label>
<input matInput />
</mat-form-field>
Sintesi
Per risolvere l’errore mat-form-field must contain a MatFormFieldControl
, seguire i passaggi seguenti
- Importare
MatInputModule
eMatFormFieldModule
- Aggiungere la direttiva
matInput
al controllomat-form-field
. cioè,input
otextarea
- Controllare l’ortografia di
matInput
. - Non usare
*ngIf
sul controllomat-form-field
, ma sull’elementomat-form-field