select 框中的表单组绑定 Angular
Formgroup binding in select boxes with Angular
我有一个嵌套的 JSON 数组,我必须使用 formgroup 或 formarray 迭代到 HTML。此响应将根据数组的长度迭代到动态创建的 select 框中。
收到的 JSON 响应是:
var result = [{
id: 1,
options: [
{ option: 'Ram', toBeSelected: false },
{ option: 'Ravi', toBeSelected: true }
]
},
{
id: 2,
options: [
{ option: 'Pooja', toBeSelected: false },
{ option: 'Prakash', toBeSelected: false }
]
}
]
我必须以这种方式将其迭代到 HTML 中,如果这些选项中的任何一个具有 toBeSelected
作为 true
,则该选项应该预先 selected在 HTML 中,如果没有,可以显示占位符文本。
类似的东西?
<div *ngFor="let result of results">
<p>ID - {{ result.id }}</p>
<div *ngFor="let option of result.options">
<input
type="checkbox"
[checked]="option.toBeSelected">
{{ option.option }}
</div>
</div>
虽然这不是 FormGroup 的示例,但应该可以帮助您了解它是如何完成的。
根据问题中的JSON
,你可以这样写:
ngOnInit() {
this.form = this._FormBuilder.group({
selections: this._FormBuilder.array([])
});
// the api call should be made here
this.jsonResponse.map(item => {
const opts = item.options.filter(o => {
return o.toBeSelected
});
if (opts.length) {
this.addSelections(opts[0].option);
} else {
this.addSelections();
}
});
}
get selections() {
return this.form.get('selections') as FormArray
}
addSelections(value?: string) {
this.selections.push(
this._FormBuilder.control((value ? value : ''))
);
}
实时取景here.
Stackblitz link:https://stackblitz.com/edit/dynamic-form-binding-kx7nqf
我有一个嵌套的 JSON 数组,我必须使用 formgroup 或 formarray 迭代到 HTML。此响应将根据数组的长度迭代到动态创建的 select 框中。 收到的 JSON 响应是:
var result = [{
id: 1,
options: [
{ option: 'Ram', toBeSelected: false },
{ option: 'Ravi', toBeSelected: true }
]
},
{
id: 2,
options: [
{ option: 'Pooja', toBeSelected: false },
{ option: 'Prakash', toBeSelected: false }
]
}
]
我必须以这种方式将其迭代到 HTML 中,如果这些选项中的任何一个具有 toBeSelected
作为 true
,则该选项应该预先 selected在 HTML 中,如果没有,可以显示占位符文本。
类似的东西?
<div *ngFor="let result of results">
<p>ID - {{ result.id }}</p>
<div *ngFor="let option of result.options">
<input
type="checkbox"
[checked]="option.toBeSelected">
{{ option.option }}
</div>
</div>
虽然这不是 FormGroup 的示例,但应该可以帮助您了解它是如何完成的。
根据问题中的JSON
,你可以这样写:
ngOnInit() {
this.form = this._FormBuilder.group({
selections: this._FormBuilder.array([])
});
// the api call should be made here
this.jsonResponse.map(item => {
const opts = item.options.filter(o => {
return o.toBeSelected
});
if (opts.length) {
this.addSelections(opts[0].option);
} else {
this.addSelections();
}
});
}
get selections() {
return this.form.get('selections') as FormArray
}
addSelections(value?: string) {
this.selections.push(
this._FormBuilder.control((value ? value : ''))
);
}
实时取景here.
Stackblitz link:https://stackblitz.com/edit/dynamic-form-binding-kx7nqf