Попробую немного объяснить мою ситуацию...
У меня есть <form>
, который содержит FormArray
. В каждой FormArray
группе есть еда control
, и каждая из них <select>
.
Все выборки заполняются одним array
.
Чего я пытаюсь достичь, так это:
Параметры каждого выбора должны быть выбраны исключительно... другими словами, результат в FormArray
должен содержать только уникальные элементы.
Мой фактический код:
HTML:
<form [formGroup]="formGroup">
<div>
<button mat-raised-button color="primary" type="button" (click)="addItem()">
<mat-icon>add</mat-icon>Add food
</button>
</div>
<ng-container
formArrayName="items"
*ngFor="let item of formArray.controls; index as i"
>
<mat-card>
<mat-card-title>
<h3>Item nº {{ i + 1 }}</h3>
<button
mat-mini-fab
color="warn"
matTooltip="Remove"
type="button"
(click)="removeItem(i)"
>
<mat-icon>delete</mat-icon>
</button>
</mat-card-title>
<mat-card-content [formGroupName]="i">
<mat-select
formControlName="food"
name="food"
placeholder="Favorite food"
>
<mat-option
[value]="food.value"
*ngFor="let food of foods"
>
{{ food.viewValue }}
</mat-option>
</mat-select>
</mat-card-content>
</mat-card>
</ng-container>
</form>
Компонент:
@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'select-overview-example',
templateUrl: 'select-overview-example.html',
})
export class SelectOverviewExample {
readonly foods: readonly Food[] = [
{ value: 'steak-0', viewValue: 'Steak' },
{ value: 'pizza-1', viewValue: 'Pizza' },
{ value: 'tacos-2', viewValue: 'Tacos' }
];
readonly formArray = this.formBuilder.array([]);
readonly formGroup = this.formBuilder.group({
items: this.formArray
});
constructor(private readonly formBuilder: FormBuilder) {}
addItem(): void {
this.formArray.push(
this.formBuilder.group({
food: ''
})
)
}
removeItem(index: number): void {
this.formArray.removeAt(index);
}
}
Я хочу знать, что является лучшим вариантом для достижения этой цели.
Пока думаю в 3-х вариантах:
1 - Отключить опции, которые уже были выбраны в другом <select>
;
2 - Создайте собственный валидатор и сообщите пользователю, что он не может выбрать вариант из 2 или более вариантов.
3 – Полностью удалить выбранные параметры из других вариантов выбора.
Я предпочитаю 1-й. вариант, однако я не могу найти способ сделать это. Может кто-нибудь показать мне что-нибудь для начала? Я надеюсь, что вопрос достаточно ясен.
Вот демонстрация.
jQuery
: rndnext.blogspot.com.br/2009/08/. - person dev_054   schedule 27.08.2017