【问题标题】:AngularJS filter issue for different filter不同过滤器的AngularJS过滤器问题
【发布时间】:2026-01-03 02:05:03
【问题描述】:

我有不同属性的汽车过滤器,您可以在下面查看我的代码。

<li><a ng-click="specFilter.just_arrived =  ''"><h4>TODOS</h4></a></li>
<li><a ng-click="specFilter.just_arrived = true"><h4>Recently arrived</h4></a></li>
<li><a ng-click="specFilter.sale = true"><h4>sold</h4></a></li>
<li><a ng-click="specFilter.popular= true"><h4>popular</h4></a></li>

现在我的问题是前两个&lt;li&gt; 工作良好,因为具有相同的属性just_arrived。所以如果我选择它会给我所有或刚到的汽车。但其他两个过滤器具有不同的属性:salepopular。我需要在所有这四个过滤器之间进行操作。

我的意思是一次它应该只过滤当前选择的一个属性,前两个&lt;li&gt; 工作正常,但是如果我选择第三个或第四个过滤器,它会使用第一个或第二个选定的过滤器进行“与”操作。我需要喜欢如果我选择了受欢迎的,那么唯一的结果应该是受欢迎的汽车。如果选择出售则需要出售汽车。如果选择了最近到达的汽车,那么刚刚到达的汽车应该只返回。我的意思是一次应该只应用一个过滤器。

任何类型的帮助都是可以接受的。

角度控制器

angular.module('myCarApp').controller('carController', ['$scope', '$rootScope', '$http', '$state', '$timeout', function ($scope, $rootScope, $http, $state, $timeout) {

    $scope.goToItem = function (car) {
        $scope.idx = $scope.cars.indexOf(car);
        $state.go('car', {
            info: car.year + '-' + car.brand.replace(/\s+/g, '-').toLowerCase() + '-' + car.model.replace(/\s+/g, '-').toLowerCase() + '-' + $scope.idx
        });
    }

    $scope.specFilter = {};

    function getData() {
        $rootScope.showLoader = true;
        //HTTP Request
        $http.get('jsonurl').success(function (data) {
            $scope.cars = data;

            $timeout(function () {
                $rootScope.showLoader = false;
            }, 2000)
        });

    }


    //PRICE SLIDER
    $scope.sliderPrice = {
        minValue: 0,
        maxValue: 50000000,
        options: {
            floor: 0,
            ceil: 50000000,
            step: 100000,
            minRange: 2000000,
            maxRange: 50000000,
            pushRange: true,
            onChange: function () {
                $(".rz-bubble").digits();
            },
            translate: function (value) {
                return '$' + value;
            }
        }
    };
    $scope.minFilterPrice = function (car) {
        return car.price_offer >= $scope.sliderPrice.minValue;
    };
    $scope.maxFilterPrice = function (car) {
        return car.price_offer <= $scope.sliderPrice.maxValue;
    };
    //---------------
    //KM SLIDER
    $scope.sliderKm = {
        minValue: 0,
        maxValue: 200000,
        options: {
            floor: 0,
            ceil: 200000,
            step: 1000,
            minRange: 1000,
            maxRange: 200000,
            pushRange: true,
            onChange: function () {
                $(".rz-bubble").digits();
            },
            translate: function (value) {
                return value + ' Km';
            }
        }
    };
    $scope.minFilterKm = function (car) {
        return car.km >= $scope.sliderKm.minValue;
    };
    $scope.maxFilterKm = function (car) {
        return car.km <= $scope.sliderKm.maxValue;
    };

    $scope.getStyle = function (car) {
        if (car.onHover) {
            return {
                "bottom": $(".car-overview").height() + 20
            };
        } else {
            return {
                "bottom": "0"
            };
        }
    }


    $scope.onHover = function (car) {
        if ($(window).width() > 768) {
            car.onHover = true;
        }
    }


    $scope.onHoverOut = function (car) {
        if ($(window).width() > 768) {
            car.onHover = false;
        }
    }

    getData();


    $scope.getFormattedNumber=function(x){

            return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
        };

}])

【问题讨论】:

  • 也分享你的JS代码。
  • @dhavald99 您的specFilter 如何用于展示合适的汽车?
  • @tanmay specFilter.just_arrived。这意味着 just_arrived 是 json 文件中的属性,因此它将像 json 文件中的 just_arrived = true 一样进行比较,并将返回哪些汽车具有真值的结果。它当前正在过滤值,但我需要一次过滤一个值应该过滤。目前,如果我过滤 just_arrived 并再次单击已售出,则它会返回结果 just_arrived && 已售出。但它应该只返回结果已售出,因为我最后点击了已售出。
  • @dhavald99 那你为什么不做这样的事情呢? ng-click="specFilter = {}; specFilter.popular= true" 为了使已经应用的过滤器无效并设置一个新的过滤器!

标签: javascript jquery html angularjs angularjs-filter


【解决方案1】:

在这里,您的问题是 salepopularjust_arrived 过滤器名称不同,因此当您在 ng-click 上分配 true 时,它们不会被覆盖。因此,您可以做这样的事情来避免多个过滤器(无意)一起应用,而不是仅仅分配它们true

ng-click="specFilter = {}; specFilter.popular= true"

这将使已应用的过滤器无效并设置一个新过滤器!

【讨论】:

  • 嗨@tanmay。谢谢你的回答。但我需要将这四个过滤器分组。我还有其他不应该影响的单独的 6 个过滤器。其他过滤器应与此过滤器一起使用和操作
  • @dhavald99 好吧,这可能不是解决问题的最佳方法,但您可以单击一个设置其他三个false,反之亦然。此外,请确保您已提供所有相关要求。
  • 您能告诉我如何将其他三个设置为空,因为已经尝试过但也不起作用。
  • TODOS

  • @dhavald99 试试这样的方法:&lt;li&gt;&lt;a ng-click="specFilter.sale = false; specFilter.popular = false; specFilter.just_arrived = true"&gt;&lt;h4&gt;TODOS&lt;/h4&gt;&lt;/a&gt;&lt;/li&gt;
  • 只是做一些改变就完成了。
  • TODOS

  • 跨度>
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签