2016-11-26 4 views
0

Пусть говорят, у меня есть следующие:Показать/скрыть опции SELECT?

<select class="form-control" name="blah" ng-model="$ctrl.form.blah" ng-options="item.id as item.name group by item.etype | uppercase for item in $ctrl.opts"></select> 

Теперь то, что я хочу, чтобы скрыть/показать все GROUP, нажав группы кнопку ИЭ есть кнопки для каждой группы, и когда я переключать кнопкой мыши, я хочу заданные параметры группы, чтобы скрыть/показать в поле выбора.

Любой способ сделать это?


Я сделал это с фильтром, как объяснил Ятрикс, плюс передаю контулер компонента в качестве аргумента. Таким образом, я могу получить доступ к триггерным варам, чтобы решить, что именно фильтровать.

Единственная проблема у меня сейчас является то, что я использую:

ctrl.form.select_box = ctrl.opts[0].id 

Я больше не может использовать, чтобы установить параметр по умолчанию !! любой способ решить это.


это то, что я закончил с:

<select class="form-control" name="blah" ng-model="$ctrl.form.blah" ng-options="item.id as item.name group by item.etype | uppercase for item in $ctrl.opts | blah:$ctrl"></select> 

angular.module('myapp').filter('blah', function() { 
return function(items, ctrl) { 
    rv = []; 
    angular.forEach(items, function(item) { 
     if (ctrl.blah_f1 && item.etype == 'type1') rv.push(item); 
     if (ctrl.blah_f2 && item.etype == 'type2') rv.push(item); 
    }); 
    return rv; 
}; 
}); 

Я знаю, что это не очень хорошая идея, чтобы получить прямой доступ к Ctrl, но не вижу никакого другого пути чисто влияющий фильтр. Флаги запускаются с помощью двух кнопок, которые ведут себя как радио &. Так, хотя бы одна кнопка должна быть включена, но возможно, что оба они включены. Таким образом, пользователь может решить, какой «тип» элементов находится в поле выбора.

+0

Не пропускайте контроллер в качестве аргумента в фильтре. Сохраняйте свои проблемы отдельно. Фильтр должен отображать список элементов и фильтровать их и больше ничего не делать. Он не должен требовать знания о работе контроллера. – Yatrix

+0

Можете ли вы разместить свой код в скрипке? Будет намного легче увидеть, что вы делаете. Вы не размещаете много кода здесь. – Yatrix

ответ

1

Вы можете использовать специальный фильтр. Это будет фильтровать эти элементы на интерфейсе. Когда вы переключите его обратно, он будет добавлен в список.

.filter('myFilter', function() { 
     // items = your options 
     return function (items) { 
     var filtered = []; 

     for (var i = 0; i < items.length; i++) { 
      var item = items[i]; 

      // add a property to your model to track what's been removed 
      if (!item.removed) { 
      filtered.push(item); 
      } 
     } 

     // return all the times that haven't been removed 
     return filtered; 
     }; 
    }); 
+0

спасибо, ... он должен быть динамическим .. то есть я могу «переключать» несколько раз. как фильтр сделает это? не фильтрует действие один раз – user1019129

+0

@ user1019129 no, фильтр обновляется по мере обновления объектов. Поэтому, если вы переключите свойство с true на false и обратно, он отобразит эти элементы или спрячет эти элементы. – Yatrix

+0

как передать информацию фильтру? из того, что вы разместили, я не вижу, как фильтр показывает, что от него требуется, чтобы скрыть. – user1019129

Смежные вопросы