Использование ng-repeat am загружает несколько элементов раскрывающегося списка выбора, и в каждом раскрывающемся списке загружается один и тот же набор значений. Как только пользователь выбирает параметр в поле выбора; Выбранный параметр не должен отображаться в других полях выбора (параметрах).
Пример: если пользователь выбирает вариант A из select: 1; затем в select: 2 или любом другом select: N вариант A не должен отображаться и наоборот.
Плункер: https://plnkr.co/edit/yCFIanCXPece49dk?open=lib%2Fscript.js&deferRun=1&preview
Код:
<option ng-repeat = "option in data.availableOptions | filter:arrayFilter(select.selectedOption,$index)" value = "{{option.id}}">
$scope.arrayFilter = function(selectionArray, position) {
return function(item, index) {
return selectionArray.indexOf(item.id) == -1 || item.id == selectionArray[position];
}
}
Вы можете получить параметры вложенного ng-repeat с помощью функции, а затем отфильтровать параметры, которые не являются текущими и выбраны:
HTML:
<select name = "repeatSelect{{$index}}" id = "repeatSelect{{$index}}" ng-model = "select.selectedOption">
<option
ng-repeat = "option in getAvailableOptions(select.selectedOption)"
value = "{{option.id}}"
>
{{option.name}}
</option>
</select>
контроллер:
$scope.getAvailableOptions = function(current) {
return this.data.availableOptions.filter((o) => o.id === current || !this.data.availableSelect.some(s => s.selectedOption === o.id));
};
а вот и раздвоенный плункер
Разветвил плункер, чтобы включить пустой выбор; Если пользователь хочет повторно использовать/сбросить значение параметра. plnkr.co/edit/…