Для этого можно выполнить следующее.
Назначить ссылку на шаблон для кнопки #button
и передать ее методу компонента (click)="checkState(button)"
<mat-radio-button #button class="example-radio-button" *ngFor="let season of seasons" [value]="season" (click)="checkState(button)">
Создать локальныйпеременная в компоненте для сохранения значения кнопки для сравнения в checkState()
currentCheckedValue = null;
DI Renderer2 для удаления фокуса с кнопки
constructor(private ren: Renderer2) { }
Обтекание логики в setTimeout
для ее установкив цикле дайджеста проверьте, существует ли локальная переменная и равно ли текущее значение значению аргумента ... если true, отмените выбор, удалите фокус и пустую локальную переменную ... иначе установите локальную переменную для будущего сравнения.
checkState(el) {
setTimeout(() => {
if (this.currentCheckedValue && this.currentCheckedValue === el.value) {
el.checked = false;
this.ren.removeClass(el['_elementRef'].nativeElement, 'cdk-focused');
this.ren.removeClass(el['_elementRef'].nativeElement, 'cdk-program-focused');
this.currentCheckedValue = null;
this.favoriteSeason = null;
} else {
this.currentCheckedValue = el.value
}
})
}
Stackblitz
https://stackblitz.com/edit/angular-c37tsw?embed=1&file=app/radio-ng-model-example.ts