угловой фильтр ценового диапазона не работает

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

Это то, за чем я следую - 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

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


person Stacy J    schedule 28.05.2016    source источник
comment
Я использовал parseInt для преобразования.. должно ли это работать тогда   -  person Stacy J    schedule 28.05.2016
comment
Создайте демонстрацию, которая воспроизводит проблему   -  person charlietfl    schedule 28.05.2016
comment
@charlietfl - извините, я не мог сделать это раньше - я создал скрипку. Происходит то, что он возвращает результаты без отфильтрованных элементов, а не только отфильтрованные элементы - jsfiddle.net/da60e8zg   -  person Stacy J    schedule 31.05.2016


Ответы (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;
        }
    }
person John    schedule 01.06.2016
comment
когда я сделал это... но никаких изменений... такое же поведение - person Stacy J; 01.06.2016
comment
да, это работает, но я хотел отобразить весь результат, если ничего не выбрано - person Stacy J; 01.06.2016
comment
Просто верните значение, если параметр priceIncludes пуст. Проверьте обновленный код в ответе. - person John; 01.06.2016