Группа mat-radio-group позволяет выбрать только уникальный вариант среди разных вариантов, поэтому вам нужен только уникальный FormControl. Вы используете вспомогательный массив для отображения параметров - не элемента управления в форме
transports=[{value:0,text:"Train"},
{value:1,text:Subway},
{value:2,text:"Bus"},
{value:3,text="Taxi"}
]
<mat-radio-group formGroupName="radioOptions">
<mat-radio-button *ngFor="let op of transports" [value]="op.value">
{{op.text}}
</mat-radio-button>
</mat-radio-group>
и вашего formModel.get ('radioOptions'). Значение становится 0,1,2 или 3
Вы также можете использовать отдельную группу mat-radio-group и использовать [value] и (change) для придания значения различным элементам управления formGroup. Помните, что FormControl существует, даже если у нас нет элемента управления вводом
<mat-radio-group [value]="getIndex()"
(change)=setValue($event.value)
<mat-radio-button *ngFor="let op of transports" [value]="op.value">
{{op.text}}
</mat-radio-button>
</mat-radio-group>
И в .ts
getIndex() //return the index of the first is true
{
return Object.keys(this.formModel.value.radioOptions).findIndex(
x => this.formModel.value.radioOptions[x]
);
}
setValue(index: number) {
Object.keys((this.formModel.get("radioOptions") as FormGroup).controls).forEach(
(field, i) => {
const control=this.formModel.get("radioOptions."+field)
if (control)
control.setValue(i == index);
}
);
}
stackblitz с последней частью