【发布时间】:2022-08-13 20:31:56
【问题描述】:
我正在使用 Angular 材料将项目更新到 Angular 14,我已经生成了一个包含多个字段的通用表单,但 mat-select 不保留默认选项。
我正在从 component.ts 生成动态 FormControl,如果显示了值,则为文本字段,但 mat-select 不是。
这是我的component.html:
<div [formGroup]=\"formDialog\" mat-dialog-content *ngFor=\"let column of data.columns\">
<mat-form-field *ngIf=\"column != \'province\'\">
<input matInput [formControlName]=\"column\" [placeholder]=\"column\">
</mat-form-field>
<mat-form-field *ngIf=\"column == \'province\'\">
<mat-label>{{ column }}</mat-label>
<mat-select [formControlName]=\"column\" (valueChange)=\"currProvince($event)\">
<mat-option *ngFor=\"let item of geoProvinces\" [value]=\"item\">
{{ item.nm }}
</mat-option>
</mat-select>
</mat-form-field>
</div>
这是我的component.ts:
////////////
this.data.dataRow = {
\"name\":\"test3Prov\",
\"phoneNumber\":123456,
\"province\":\"Madrid\"
}
//////////////
ngOnInit(): void {
this.getGeoAPI();
let fieldControls = {};
Object.entries(this.data.dataRow).forEach(([key, value]) => {
fieldControls[key] = new FormControl(value || \'\');
})
this.formDialog = new FormGroup(fieldControls)
}
这是获得省份的方法:
getGeoAPI(): void {
this.genericService.getPath(\'geoApi\').subscribe((elem: any) => {
this.geoProvinces = elem.provinces
})
}
这是this.geoProvinces 的示例:
[
{
\"id\":\"01\",
\"nm\":\"Álava\"
},
{
\"id\":\"02\",
\"nm\":\"Albacete\"
},
{
\"id\":\"03\",
\"nm\":\"Alicante\"
}
]
这是显示形式的屏幕截图:
-
省只是一个简单的字符串还是一个对象?从您的 TS 看起来它是一个字符串,从您的 HTML 看起来它是一个对象。
-
对不起昨天我不得不离开!来吧,我发了一个问题来帮助你! :)
-
@manjirosano 此组件是在编辑表格行时显示的对话框。
this.data.dataRow是要编辑的行的对象,这里province是一个String,geoProvinces是存储省份列表的对象。我想要的是默认选择dataRow的省,虽然我可以改变它 -
@build我最终理解了它!我更新了我的答案,看看吧! :D
标签: angular angular-material angular-forms