Это должно быть относительно просто, не знаю, почему я борюсь.
У меня есть три флажка, и я хочу убедиться, что пользователь нажимает один и только один.Таким образом, валидатор должен проверить, что любой из двух других флажков был отмечен, и предотвратить повторный выбор.Следует убедиться, что хотя бы один из них отмечен.
Я пытался использовать пользовательский валидатор, но вы можете только передать элемент управления. Мне нужно что-то, что проверяет все поля для проверки.
<form class="example-section" [formGroup]="queryType">
<mat-checkbox class="example-margin" [(ngModel)]="artist" formControlName="artist">Artist</mat-checkbox>
<mat-checkbox class="example-margin" [(ngModel)]="album" formControlName="album">Album</mat-checkbox>
<mat-checkbox class="example-margin" [(ngModel)]="track" formControlName="track">Track</mat-checkbox>
</form>```
export class SearchComponent implements OnInit, OnChanges {
filteredSearchItems: Observable<SearchResult[]>;
isLoading = false;
searchForm: FormGroup;
queryType: FormGroup;
disabled: boolean = false;
artist: boolean;
album: boolean;
track: boolean;
constructor(private searchService: SearchService, private fb:
FormBuilder) {
this.searchForm = this.fb.group({
searchInput: new FormControl(null)
});
this.queryType = this.fb.group({
'artist': new FormControl(false,[CustomValidators.validateQuery]),
'album': new FormControl(false,[CustomValidators.validateQuery]),
'track': new FormControl(false,[CustomValidators.validateQuery])
});
}
export class CustomValidators {
static validateQuery(control: FormGroup): { [s: string]: boolean }
{//not sure how to pass in all boxes
for(const con of control.controls) { // somewhere here is the answer
if(con.value) {
return { alreadyChecked: true}
}
}
return null;
};
}