2016-05-28 5 views
0

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

Это то, что я следую - http://jsfiddle.net/65Pyj/

HTML

<div class="checkbox"> 
    <input type="checkbox" ng-click="includePrice('0,700')" ng-checked=""/> Rs 700 and Below <br/> 
    <input type="checkbox" ng-click="includePrice('701,1500')" ng-checked=""/> Rs 701 - 1500 <br/> 
    <input type="checkbox" ng-click="includePrice('1501,3000')" ng-checked=""/> Rs 1501 - 3000 <br/> 
    <input type="checkbox" ng-click="includePrice('3001,5000')" ng-checked=""/> Rs 3000 - 5000 <br/> 
    <input type="checkbox" ng-click="includePrice('5001,100000000')" ng-checked=""/> Rs 5001 and Above 
</div> 

В контроллере, я получаю мин и максимум каждого чекбокса в массив и снова минимальное и максимальное из этого массива в качестве нижнего и верхнего предела

Контроллер

$scope.priceIncludes = []; 
$scope.ranges = []; 

$scope.includePrice = function(pricerange) { 
    var i = $.inArray(pricerange, $scope.priceIncludes); 
    if (i > -1) { 
     $scope.priceIncludes.splice(i, 1); 
     ranges = pricerange.split(',').splice(i, 1); 
    } else { 
     $scope.priceIncludes.push(pricerange); 
    } 
    var arrayString = $scope.priceIncludes.join(); 
    var rangeArray = arrayString.split(',') 
    $scope.maxRange = function(rangeArray){ 
     return Math.max.apply(Math, rangeArray); 
    }; 
    $scope.minRange = function(rangeArray){ 
     return Math.min.apply(Math, rangeArray); 
    }; 
    $scope.ranges[1] = $scope.maxRange(rangeArray); 
    $scope.ranges[0] = $scope.minRange(rangeArray); 
} 

$scope.priceFilter = function(searchResult) { 
    if ($scope.priceIncludes.length > 0) { 
     if ((parseInt(searchResult.fees) >= parseInt($scope.ranges[0])) && (parseInt(searchResult.fees) <= parseInt($scope.ranges[1]))) 
      return; 
    } 
    return searchResult; 
} 

При использовании

filter:priceFilter 

он возвращает случайные результаты, которые выпадают из выбранного минимального и максимального предела.

+0

Я использовал ParseInt чтобы convert..should это работает, то –

+0

Создать демо, которое тиражирует проблема – charlietfl

+0

@charlietfl - извините, я не мог сделать это раньше - я создал скрипку. То, что происходит, это возврат результатов без фильтрованных элементов, а не только отфильтрованных элементов - https://jsfiddle.net/da60e8zg/ –

ответ

1

Предполагается вернуть значение, если условие истинно. Не наоборот.

$scope.priceFilter = function(searchResult) { 
     if ($scope.priceIncludes.length > 0) { 
      if ((parseInt(searchResult.fees) >= parseInt($scope.ranges[0])) && (parseInt(searchResult.fees) <= parseInt($scope.ranges[1]))) 
     return searchResult; 
     } else { 
     return searchResult; 
     } 
    } 
+0

, когда я это сделал ... но без изменений ... такое же поведение –

+1

Я изменил ваша скрипка https://jsfiddle.net/29yjj95x/. Попробуй это. – John

+0

да, это работает, но я хотел отобразить весь результат, если ничего не выбрано. –

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