2016-10-07 1 views
0

У меня возникли некоторые проблемы фильтрации списка по типу (номер) в угловом (1.5.8)угловой нг-повтор фильтра по номеру

мой нг повторе с фильтром заключается в следующем:

ng-repeat="activity in guild.history_updates | filter : { 
    action_type: filters.action_type, 
    user_id: filters.user, 
}" 

и мой фильтр

<md-input-container class="md-block"> 
    <label>Type</label> 
    <md-select ng-model="filters.action_type"> 
     <md-option> 
      All 
     </md-option> 
     <md-option ng-repeat="action_type in guildActivityCtrl.action_types" 
      ng-value="action_type.type"> 
      {{action_type.name}} ({{ action_type.type }}) 
     </md-option> 
    </md-select> 
</md-input-container> 

Когда я фильтрации на ACTION_TYPE 1 Я также получаю типы действий 10

filter action type 1 filter action type 1 result

Но когда я Ставить фильтр 10, я получаю право результаты

filter action type 10 filter action type 10 result

Каждый другой тип действия фильтруется хорошо, как хорошо (например, ACTION_TYPE 3)

filter action type 3 filter action type 3 result

ответ

2
ng-repeat="activity in guild.history_updates | filter:{action_type:filters.action_type,user_id: filters.user}:true" 

Добавление ": правда" после того, как ваш фильтр должен изменить это к строгой проверке равенства, теперь сравнения числовых значений.

Надеюсь, это поможет.

https://docs.angularjs.org/api/ng/filter/filter

В разделе Аргументы определяет компаратор.

+0

добавление ': true' будет показывать нулевые результаты для каждого фильтра. – Xiduzo

+0

Это потому, что он не работает в фильтрах action_type:. Мне было бы интересно узнать, что даст вам простая фильтрация user_id. Я предполагаю, что строгая проверка action_type - это то, почему вы ничего не получаете. – nham

+0

, использующий ': true', действительно не повлияет на фильтр пользователя, только фильтр типа действия не будет отображаться с любыми результатами. – Xiduzo

1

Как сказал Нил Гамильтон, мы должны добавить :true, чтобы добавить строгую проверку равенства.

Добавление :true не будет работать, если на выходе мкр-выбора не является числом, поэтому мы можем добавить фильтр для разбора вывода в ряд, как:

.filter('parseInt', function() { 
    return function(number) { 
     if(!number) { 
      return false; 
     } 
     return parseInt(number , 10); 
    }; 
}) 

Мы можем добавить этот фильтр для фильтрации нг-повторы, как:

ng-repeat="activity in guild.history_updates | filter : { 
    action_type: (filters.action_type | parseInt), 
    user_id: filters.user, 
} : true" 

Edit: Если вы не хотите строгой проверки каждого значения в фильтрах можно использовать несколько фильтров, таких как:

ng-repeat="activity in guild.history_updates 
| filter : { 
    action_type: (filters.action_type | parseInt), 

} : true 
| filter: { 
    user_id: filters.user 
}" 
Смежные вопросы