2014-12-12 2 views
0

Обновление для angularjs 1.3.6 сломало некоторые из моих фильтров.Избегать фильтра по асинхронному значению ng-options по умолчанию

Я попытался их исправить и добрался до решения this.

Скрыть опции по умолчанию:

<select ng-model="search.type" ng-options="g.id as g.name for g in group"> 
    <option ng-show="false" value="">Any</option> 
</select> 

Добавить «Любой» вариант, который не будет фильтровать список.

$scope.group = []; 
$scope.group[0] = {id:'',name:'Any'}; 

У кого-нибудь есть лучшее решение для этого? Использование этого трюка ng-show кажется мне нехорошо.

+0

Я не понимаю, в чем проблема. Какая последняя альтернатива (была ли та, которую вы хотели?) Решить? –

+0

@NewDev последняя альтернатива решает проблему, но кажется мне уродливой. Надеюсь, у кого-то есть более чистое решение. – Pierre

+0

Я не понимаю проблему. –

ответ

0

Вы сделали почти все правильно. Есть 2 вещи пропавших без вести, и тогда вам не нужен ng-show хак:

  1. сделать свойство ViewModel в <select> быть фактическим объектом фильтрации, а не только Id собственности, а также изменить строку фильтра соответствующим образом.
  2. Сделать свойство ViewModel равным объекту «Любой» - это приведет к правильному выбору <select>.

1)

<div ng-repeat="item in items| filter:search.type"> 
    {{item.name}} 
</div> 

<select ng-model="search" ng-options="g as g.name for g in group"> 
</select> 

2)

$scope.search = $scope.group[0] = {id:'',name:'Any'}; 

Обновлено jsFiddle

+0

Есть ли способ сохранить только «filter: search» в ng-repeat? наличие 'ng-model =" search.type "' в select полезно, если у меня есть несколько выпадающих списков для фильтрации разных полей. – Pierre

+0

Опять же, я не совсем понимаю, что вы имеете в виду. Если у вас есть дополнительные требования, задайте другой вопрос, где у вас будет возможность объяснить, что у вас есть и что вы хотите получить. –

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