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 的示例,但应该可以帮助您了解它是如何完成的。

Sample StackBlitz

根据问题中的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