angular - 使用 formControlName 的下拉垫选择的初始值未反映在 UI 中
问题描述
我有一个下拉 mat-select,它是通过 Form Builder 动态创建的,并显示在一系列循环中并提供了一个初始值,但实际上并没有设置下拉菜单本身。
const control = this.formBuilder.control(value, validators);
myForm.addControl(id, control);
debugger;
要显示的 html 是
<mat-select [value]="getFormValue(input.id)" [formControlName]="input.name" [placeholder]="idForDebug">
<mat-option *ngFor="let option of input.dropdownOptions" [value]="option.fieldValue">
{{option.display}}
</mat-option>
</mat-select>
我还尝试了上面提供/不提供 [value] 参数的方法,因为我已经在使用 [formControlerName]。每种方式的行为相同
getFormValue 定义为
public getFormValue(id) {
debugger;
return myForm.get(id).value;
}
我已经通过调试器确认,当我创建控件和 getFormValue 方法时,值和 id 都匹配。如果所有数据都存在并提供,为什么没有设置下拉值?我会错过什么?
通过控制台和调试器确认所有值和 ID 在上述所有 3 个位置都匹配,但未预先选择下拉列表。
-- 我在 stackblitz 上创建了一个简化版本 https://stackblitz.com/edit/angular-pggkbk
在这个实时示例中,我希望下拉列表中预先填充了该值1
,因为这是通过创建控件时提供的
const control = this.formBuilder.control(1, []);
解决了
我觉得很傻,从数据库传入的值是字符串,所以当我将下拉值设置为字符串但将其与 dropdownOptions 中的 [value] 进行比较时,它们从未匹配。
ParseInt(value) 一切都解决了
解决方案
我真的不明白你的问题。我想你有一个输入数组,比如
inputs=[{
name:'select',
dropdownOptions:[
{fieldValue: 'steak-0', display: 'Steak'},
{fieldValue: 'pizza-1', display: 'Pizza'},
{fieldValue: 'tacos-2', display: 'Tacos'}
]
}]
和一个带有值的变量“数据”
data:any={select:'pizza-1'}
如果你在 NgOnInit 中使用变量形式,你可以使用类似
form=new FormGroup({})
ngOnInit()
{
this.inputs.forEach(x=>{
this.form.addControl(x.name,new FormControl(this.data[x.name]))
})
}
好吧,你可以用 option 的第一个值给 formControl 赋值
this.form.addControl(x.name,new FormControl(x.dropdownOptions[0].fieldValue))
然后你显示这样的表格
<form [formGroup]="form">
<div *ngFor="let input of inputs">
<mat-form-field>
<mat-label>Favorite food</mat-label>
<mat-select [formControlName]="input.name" [placeholder]="idForDebug">
<mat-option *ngFor="let option of input.dropdownOptions" [value]="option.fieldValue">
{{option.display}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
</form>
看看stackblitz。请记住,给一个 FormControl 的值而不是使用 [value],只需更改控件的值。您可以在创建表单时制作,或使用setValue
推荐阅读
- amazon-elastic-beanstalk - 在 AWS elasticbeanstalk 配置文件中引用环境变量
- javascript - 找到 div 后如何在 javascript/jquery 中设置 img 标签的样式?
- c - 用 `mmap` 替换 `chardev`
- json - 仪表板使用本地 json 数据,但在从 WS 加载数据时返回错误
- node.js - AWS Lambda 函数超时但适用于本地实例
- python - 无法在 Django 中创建对象
- c++ - 从C++中的两个字符串中找到唯一的共同词
- java - 想要创建 if 语句,然后是几个 else-if 语句,最后是一个“捕获所有”else 语句
- axapta - 表:ACCOUNTINGDISTRIBUTION 的 RecId 生成尚未暂停。在保留 RecId 之前暂停 RecId 生成。斧头 2012 R2
- bash - 我如何按字母顺序遍历文件夹到某些文件夹