如果你使用Angular材料模块,你可能在使用MatFormFieldModule 时遇到了mat-form-field must contain a MatFormFieldControl 错误。
这个错误发生在你错过了给你的表单字段添加一个表单字段控件。
##什么是表单字段控制?
本机元素,如 <input>或 <textarea>,放在mat-form-field ,作为表单字段控件。
如果你的mat-form-field 包含一个 <input>或 <textarea>元素,请确保你已经添加了matInput 指令,并且导入了MatInputModule ,否则你的应用程序会出现mat-form-field must contain a MatFormFieldControl 错误。
其他可以作为表单字段控制的组件包括 <mat-select>, <mat-chip-list>以及你所创建的任何自定义表单字段控件。
##修复mat-form-field must contain a MatFormFieldControl 错误。
为了解决这个错误,请在必要的模块内添加MatInputModule 和MatFormFieldModule ,或者添加app.module.ts 。
或者像Angular material tutorial中解释的那样,将所有材料模块添加到一个公共模块中,并将其添加到app.module.ts 文件中,这样我们就可以在整个应用程序中使用它们。
import { MatInputModule } from '@angular/material/input';
import { MatFormFieldModule } from "@angular/material/form-field";
@NgModule({
imports: [
MatFormFieldModule,
MatInputModule
]
})
export class AppModule { }
接下来确保你已经将matInput 指令添加到mat-form-field 控件中。
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input placeholder="Name">
</mat-form-field>
上面的代码出现了错误,因为我们没有添加matInput 指令。
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matInput placeholder="Name">
</mat-form-field>
而matInput 是区分大小写的。
因此,如果你在matInput 中有拼写错误,或在MatInput 中有大写字母( ),或在matInput 中有小写字母(matinput),你仍然会遇到这个错误。
<mat-form-field appearance="fill">
<mat-label>Input</mat-label>
<input matinput placeholder="Name">
</mat-form-field>
##mat-form-field 控制输入不应包含*ngIf
如果你在mat-form-field控件上使用*ngIf ,即。 <input>标签,你会得到mat-form-field must contain a MatFormFieldControl 的错误。
下面的代码将无法工作。
<mat-form-field>
<mat-label>Input</mat-label>
<input matInput *ngIf="condition"/>
</mat-form-field>
相反,你应该在mat-form-field 元素上使用*ngIf 。
<mat-form-field *ngIf="condition">
<mat-label>Input</mat-label>
<input matInput />
</mat-form-field>
##摘要
要修复mat-form-field must contain a MatFormFieldControl 错误,请按照以下步骤进行
1.导入MatInputModule 和MatFormFieldModule
2.在mat-form-field 控件中添加matInput 指令。即input 或textarea
3.检查matInput 的拼写。
4.不要在mat-form-field 控件上使用*ngIf ,而是在mat-form-field 元素上使用。
