Вы просто должны иметь возможность добавить (change)
прослушиватель событий в каждую группу, чтобы вызвать метод в вашем компоненте для итерации формы и обновления значений, где элемент управления в настоящее время имеет значение первичного.
Образец plunkr / stackblitz будет признателен, показывая, где вы находитесь, а также может быть использован в качестве основы для ответа. Минус этого, вот простое доказательство концепции
Пример StackBlitz:
Вот основные моменты:
HTML:
Добавить обработчик изменений к первичному радиовходу для обработки выбранного
<form [formGroup]="formGroup">
<div *ngFor="let x of [1, 2, 3]">
<input type="radio" value="na" [formControlName]="x">N/A
<input type="radio" value="secondary" [formControlName]="x"> Secondary
<input type="radio" value="primary" [formControlName]="x"
(change)="doPrimaryClick(x)"> Primary
</div>
</form>
Код TS:
В обработчике найдите все элементы управления, которые в данный момент установлены на первичные, и сбросьте их на вторичные
doPrimaryClick(x) {
// ignore the poor control names here
[1, 2, 3].filter(i => i !== x)
.forEach(i => {
const control = this.formGroup.get(`${i}`);
// current control is primary, so reset to secondary
if (control.value === 'primary') {
control.setValue('secondary');
}
})
}