Se estiver a utilizar módulos de materiais angulares poderá ter encontrado um erro mat-form-field must contain a MatFormFieldControl
ao utilizar MatFormFieldModule
.
Este erro ocorre quando falhou em adicionar um controlo de campo do formulário ao seu campo do formulário.
o que são controlos de campo de formulários?
Os elementos nativos como <input>
ou <textarea>
que são colocados dentro de mat-form-field
actuam como controlos de campo da forma
Se o seu mat-form-field
contém um <input>
ou <textarea>
certifique-se de que lhe acrescentou a directiva matInput
e importou MatInputModule
outros dados que lhe permitirão obter mat-form-field must contain a MatFormFieldControl
erro na sua aplicação.
E outros componentes que podem funcionar como um controlo de campo de forma incluem <mat-select>
, <mat-chip-list>
e qualquer controlo de campo de formulário personalizado que tenha criado.
Corrigindo o erro mat-form-field must contain a MatFormFieldControl
.
Para corrigir o erro, adicionar MatInputModule
e MatFormFieldModule
dentro de um módulo necessário ou app.module.ts
Ou como explicado em Angular material tutorial adicionar todos os módulos de material num módulo comum e adicioná-lo ao ficheiro para que possamos utilizá-los em toda a aplicação
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";
@NgModule({
imports: [
MatFormFieldModule,
MatInputModule
]
})
export class AppModule { }
E, em seguida, certifique-se de que adicionou matInput
directiva ao controlo mat-form-field
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input placeholder="Name">
</mat-form-field>
O código acima referido dá erro porque não adicionámos a directiva matInput
.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matInput placeholder="Name">
</mat-form-field>
E matInput
é sensível aos casos*
Assim, se tiver um erro ortográfico em matInput
ou letras maiúsculas (MatInput
) ou letras minúsculas (matinput
) em matInput
, ainda encontrará o erro.
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matinput placeholder="Name">
</mat-form-field>
mat-form-field
a entrada de controlo não deve conter *ngIf
Se estiver a utilizar *ngIf
no controlo do campo mate, ou seja <input>
etiqueta, receberá o erro mat-form-field must contain a MatFormFieldControl
.
O código abaixo não irá funcionar.
<mat-form-field>
<mat-label>Input</mat-label>
<input matInput *ngIf="condition"/>
</mat-form-field>
Em vez disso, deve utilizar *ngIf
no elemento mat-form-field
.
<mat-form-field *ngIf="condition">
<mat-label>Input</mat-label>
<input matInput />
</mat-form-field>
Resumo
Para corrigir o erro mat-form-field must contain a MatFormFieldControl
siga os passos seguintes
- Importação
MatInputModule
eMatFormFieldModule
- Acrescentar
matInput
ao controlomat-form-field
. i.e.,input
outextarea
- Verifique
matInput
ortografia. - Não utilizar
*ngIf
no controlomat-form-field
em vez de o utilizar no elementomat-form-field