Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- HTML:
- <div style="background-color: darkkhaki">
- <div>moviesForm: {{ moviesForm.valid }}</div>
- <div>selectedMovies.selected: {{ selectedMovies.selected }}</div>
- <div [formGroup]="moviesForm">
- <div formArrayName="movies">
- <mat-checkbox *ngFor="let movie of movies; let i = index" [formControlName]="i">
- <div>{{ movie.title }}</div>
- </mat-checkbox>
- </div>
- <div *ngIf="moviesForm.controls.movies.errors?.atLeastOneCheckboxChecked">
- Obie checkboxy muszą być zaznaczone.
- </div>
- </div>
- </div>
- TS:
- this.moviesForm = this.formBuilder.group({
- movies: new FormArray([], this.atLeastOneCheckboxCheckedValidator()),
- });
- const moviesArray = this.moviesForm.get('movies') as FormArray;
- this.movies.forEach((movie) => {
- const control = new FormControl(false); // domyślnie niezaznaczone
- moviesArray.push(control);
- });
- atLeastOneCheckboxCheckedValidator(): ValidatorFn {
- return (control: FormArray): { [key: string]: any } | null => {
- const checkboxes = control.controls;
- const checkedCheckboxes = checkboxes.filter((checkbox) => checkbox.value === true);
- if (checkedCheckboxes.length === checkboxes.length) {
- return null; // oba checkboxy są zaznaczone, brak błędu walidacji
- } else {
- return { atLeastOneCheckboxChecked: true }; // błąd walidacji
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment