【问题标题】:How create a dynamic filter with multiple checkboxes in angularJS如何在angularJS中创建具有多个复选框的动态过滤器
【发布时间】:2014-09-14 12:15:37
【问题描述】:

我一直在寻找如何在 AngularJS 中轻松创建具有多个复选框的动态过滤器,但我发现没有一个解决方案让我满意。

这是一个过滤器示例,当复选框未选中时将显示所有内容,并在选中复选框时过滤数据。 (适合搜索引擎寻找有wifi、有阳台的酒店……例如)

过滤器:

app.filter('conveniences_filter', function() {
    return function( items, types) {
        var filtered = [];
        var displayItem;
        angular.forEach(items, function(item) {
            displayItem = true;
            angular.forEach(types, function(type, key) {         
                if(type == true && item[key] == false) {
                   displayItem = false;
                }
            });
            if(displayItem == true) {
                filtered.push(item);   
            }
        });
        return filtered;
    };
});

在你的控制器中:

    $scope.types = {wifi: false, balcony: false}

在您的 HTML 中

ng-repeat="property in properties | 便利过滤器:类型"

重要提示:$scope.types 中的键必须与属性项中的键相同,否则将无法正常工作。

这里的属性示例:

对象{名称:属性,wifi:假,阳台:真}

希望对你有用:)

【问题讨论】:

    标签: angularjs checkbox filter filtering


    【解决方案1】:

    我认为这里不是 100% 清楚您的要求。至少从我从您编写的代码中得到的信息是,您希望根据对象的属性值过滤对象列表,并且您使用用于与对象进行比较的“模式”对象。

    为了填补需求中的空白,我假设您要针对包含也需要在您的项目中匹配的属性的“模式”对象进行验证。我还假设如果一个属性不在“模式”对象中,那么它将与比较无关。我还假设您希望“模式”中的所有现有属性都有效/匹配,否则不考虑该项目。

    我整理了一个小例子来解决上述要求。一般来说,您应该使用 ECMA5.1 附带的数组额外函数,并使事情变得更加简单和功能化。

    示例: http://jsbin.com/velobi/1/edit

    干杯 只园

    【讨论】:

    • 我只是展示了一种方法。但是感谢您的回答我是 AngularJS 的初学者,很高兴看到其他更好的方法来做到这一点。不同之处在于,对于我使用的解决方案,过滤器仅在选中复选框时才起作用。例如,没有任何过滤器,即使没有 wifi,您也可以看到所有属性。当您选中 wifi 复选框时,过滤器会隐藏没有 wifi 的属性。这有时很有用
    • 嗨,这很酷,我认为看到其他方法总是很高兴。不一定一个比另一个更好。您仍然可以在我的解决方案中实现您的方法,但需要注意在属性对象中 CHECKED 表示键:true 和 UNCKECKED 表示该属性不应该存在。 key: false 意味着该属性应该在项目中明确为 false。
    猜你喜欢
    • 2017-04-03
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2016-10-30
    相关资源
    最近更新 更多