我是6号角的新手,并尝试使用反应形式填充选择字段
<form [formGroup]="form">
<select id="estimated-volume" [formControlName]="'usage'">
<option [value]="null">Usage</option>
<option *ngFor="let option of availableBounds" [ngValue]="option">
{{option.lower_bound}}-{{option.upper_bound}}
</option>
</select>
</form>
“用法”是默认值,角度代码是
this.form = new FormGroup({
'usage': new FormControl(null, Validators.nullValidator),
}
);
availableBounds = [
{
lower_bound: 0,
upper_bound: 1000,
value: 5
},
{
lower_bound: 50000,
upper_bound: 10000,
value: 50
}
]
到目前为止,一切工作正常,现在在api调用之后,我得到一个响应,在该响应中,我必须根据api用其他对象填充此select,因此我正在尝试执行此类操作。
response = {
lower_bound: 2,
upper_bound: 5,
value: 5
};
this.form.controls['usage'].setValue(response, {onlySelf: true});
但这不能为选择框设置值,对替代方法有何建议?预先感谢
答案 0 :(得分:2)
availableBounds
是对象数组,response
是对象。清空availableBounds
并将其推入response
。这还将为选择框设置一个值。
var availableBounds = [
{
lower_bound: 0,
upper_bound: 1000,
value: 5
},
{
lower_bound: 50000,
upper_bound: 10000,
value: 50
}
];
console.log(availableBounds);
var response = {
lower_bound: 2,
upper_bound: 5,
value: 5
};
availableBounds.length = 0;
availableBounds.push(response);
console.log(availableBounds);
答案 1 :(得分:2)
首先,您必须将api响应推送到现有数组中,然后将值设置为formCOntrol
像这样
constructor(
private fb: FormBuilder
) {
this.form = this.fb.group({
usage: ''
})
}
ngOnInit() {
let response = {
lower_bound: 2,
upper_bound: 5,
value: 5
};
this.availableBounds.push(response);
this.form.get('usage').setValue(response, { onlySelf: true });
}
这是Stackblitz演示
答案 2 :(得分:1)
请尝试在 availableBounds 数组中推送 response 对象,因为ngFor仅适用于数组。
availableBounds.push(response);
答案 3 :(得分:1)
如果您的[ngValue] =“ option”是一个对象,则需要等于一个对象。所以
//I supouse you has a service that has a return httpClient.get(....)
myService.getValues().subscribe(res=>
//imagine res={value:50}
{
let select=this.availableBounds.find(a=>a.value==res.value)
this.form = this.fb.group({
usage: select || null //<--the object itself or null
})
});
您也可以分两步使用设置值
let select=this.availableBounds.find(a=>a.value==5)
this.form.get('usage').setValue(select || null);