2016-12-30 3 views
2

У меня есть узел настроек у пользователя с тремя булевыми значениями и тремя точно такими же значениями в элементе. Я хочу отфильтровать список элементов на основе пользовательских настроек, которые будут отображаться.Несколько булевых фильтров в угловых?

Я искал высоко и низко, и ничто не кажется, работает:

пункт:

{"cash_back": true, 
    "miles": false, 
    "points": false 
} 

пользователь:

settings: {"cash_back": true, 
    "miles": false, 
    "points": true 
} 

HTML:

ng-repeat="item in items | filter: {cash_back: user.settings.cash_back, points: user.settings.points, miles: user.settings.miles} | limitTo: curLimit" 

... но он работает, если у меня есть один

filter: {cash_back: user.settings.cash_back} 

очевидно, только для этого параметра ...

кто может помочь в этом?

Я хотел бы видеть все, что верно (так что если точки и мили истинны увидеть все пункты и мили элементы, даже если есть мили элемент со значением точек ложного)

+1

Ваш синтаксис выглядит правильно.. У вас есть элементы, соответствующие пользовательским настройкам? Все три параметра должны быть одинаковыми между настройками и элементом. –

+0

Что не работает? item.points не равно user.settings.points, поэтому ничего не должно появляться – jbrown

+1

Вот скрипка вашего кода: https://jsfiddle.net/pbeoy2oh/ Кажется, что работает. Возможно, вам нужно будет узнать [спросить] и предоставить [mcve] самостоятельно – TheSharpieOne

ответ

0

Я понял, что это вне себя. (Одно замечание - в моем пользовательском узле, я отслеживаю список идентификаторов элементов - причина для цикла for). Я установил функцию фильтрации и сравнил два логических значения (я разделил их каждый на оператор if для отладки и отслеживания результатов - это может быть очищены позже)

функция:

$scope.settingsFilter = function(card){ 
    var temp = {}; 
    for(c in $scope.cards){ 
     if ($scope.cards[c].id === card){ 
     temp = $scope.cards[c]; 
     break; 
     } 
    } 
    if(($scope.user.settings.cash_back == true && temp.cash_back == true)){ 
     return true; 
    } 
    if(($scope.user.settings.points == true && temp.points == true)){ 
     return true; 
    } 
    if(($scope.user.settings.miles == true && temp.miles == true)){ 
     return true; 
    }else{ 
     return false; 
    } 
    return false; 
} 

HTML:

ng-repeat="card in userCards | filter:settingsFilter track by $index" 
Смежные вопросы