Скрыть опцию при выборе другой Выбрать - PullRequest
0 голосов
/ 28 мая 2019

У меня есть два избранных, которые используют один и тот же список. Когда я выбираю опцию "Foo" из выбора A, та же самая опция "Foo" должна быть скрыта при выборе B. Любая идея, как это сделать с AngularJS? Я пытаюсь что-то вроде этого

<div class="col-md-6">
    <label>
        Testemunha 1 :
    </label>
    <select select-normal data-placeholder="..." ng-model="notificacaoOrientativa.testemunha1"
            ng-options="obj as obj.pessoa.nome for obj in lstTestemunha">
        <option></option>
    </select>
</div>

<div class="col-md-6">
    <label>
        Testemunha 2 :
    </label>
    <select select-normal data-placeholder="..." ng-model="notificacaoOrientativa.testemunha2" 
            ng-options="obj as obj.pessoa.nome for obj in lstTestemunha ">
        <option></option>
    </select>
</div>

  $scope.esconderTestemunhaSelecionada = function(obj){
    if($scope.lstTestemunha.includes(obj)){
      $scope.lstTestemunha.style.display = "none";
      return $scope.lstTestemunha;
    }
  }

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Я решил эту проблему не так, как хотелось бы, но отлично работает.

<div class="col-md-6">
    <label>
        Testemunha 1 :
    </label>
    <select select-normal data-placeholder="..." ng-model="notificacaoOrientativa.testemunha1"
          ng-options="obj as obj.pessoa.nome for obj in lstTestemunha">
          <option></option>
    </select>
</div>

<div class="col-md-6">
    <label>
        Testemunha 2 :
    </label>
    <select select-normal data-placeholder="..." ng-model="notificacaoOrientativa.testemunha2" ng-disabled="!notificacaoOrientativa.testemunha1"
                        ng-options="obj as obj.pessoa.nome for obj in lstTestemunha | filter: {pessoa:{ id: '!' + notificacaoOrientativa.testemunha1.pessoa.id }}">
        <option></option>
    </select>
</div>

Я заставляю пользователя устанавливать первый выбор и фильтровать второй в соответствии с первым.

Кстати, извините, мой бедный английский.

0 голосов
/ 28 мая 2019

Вы можете использовать фильтр на второй выбор. Это отфильтрует элементы во втором выборе так, что элемент, выбранный в первом, не появится. Если вам нужно, чтобы он был более сложным (например, это приведет к тому, что у второго выбора не будет никаких параметров, пока в первом выборе не будет выбрано что-то, что может быть нежелательным побочным эффектом), вы всегда можете написать свой собственный фильтр.

angular.module('app', [])
  .controller('ctrl', function($scope) {
    $scope.selectItems = [];
    $scope.selectedItemA = {};
    $scope.selectedItemB = {};
    for (let i = 1; i <= 10; i++) {
      $scope.selectItems.push({
        id: i,
        name: 'Item #' + i
      });
    }
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
  <div>
    Select Item A:
    <select ng-model="selectedItemA" ng-options="item as item.name for item in selectItems"></select>
  </div>
  <div>
    Select Item B:
    <select ng-model="selectedItemB" ng-options="item as item.name for item in selectItems | filter: { id: '!' + selectedItemA.id }"></select>
  </div>
</div>
...