Вот обновленная версия вашего Stackblitz.
Во-первых, поскольку вы используете радиовходы, вы получите только одно значение, а не массив.
this.productFormGroup = this.formBuilder.group({
productMethod: new FormControl("105"),
});
Во-вторых, все ваши радиовходы должны иметь одинаковое имя (это имя должно соответствовать formControlName
).
<input type="radio"
formControlName="productMethod"
id="radio{{i}}"
name="productMethod"
[value]=item>
<label class="custom-control-label"
for="radio{{i}}">
{{item.productName || '?'}}
</label>
В-третьих, я бы не использовал объект в качестве значения формы, потому что вы не можете сравнивать объекты (легко), чтобы иметь возможность установить значение по умолчанию. Используйте productId
и используйте метод для получения соответствующего продукта.
getProductById(id): any {
return this.productList.find(p => p.productId == id);
}
Наконец, я сделал другие небольшие изменения, чтобы сделать ваш код немного лучше.
<div [formGroup]="productFormGroup">
<div *ngFor="let item of productList; let i = index;">
<input type="radio"
formControlName="productMethod"
id="radio{{i}}"
name="productMethod"
[value]=item.productId>
<label class="custom-control-label"
for="radio{{i}}">
{{item.productName || '?'}}
</label>
</div>
</div>
{{ getProductById(productFormGroup.controls.productMethod.value) | json }}