如何在angularJS中过滤多个值(OR运算)(续)

时间:2015-04-21 21:00:06

标签: javascript angularjs angularjs-ng-repeat

我可以穿过这个非常有用的角度滤镜。我想改变它,以便删除任何未明确过滤的项目。现在,如果任何密钥具有未被识别的属性,则忽略它们完全密钥。基本上我想要在没有密钥属性的情况下过滤掉项目。例如,如果$ scope.searchName不匹配,则应由过滤器删除。

我在这里得到了过滤器。 https://stackoverflow.com/a/21169596/2292822

<div ng-repeat="item in filtered = (items | filterMultiple:queryBy)>

这是相关的范围变量和过滤器

$scope.queryBy = {name:$scope.searchName, y1:$scope.selectedYear,y2:$scope.selectedYear,y3:$scope.selectedYear,y4:$scope.selectedYear};



myApp.filter('filterMultiple',['$filter',function ($filter) {return function (items, keyObj) {
var filterObj = {
    data:items,
    filteredData:[],
    applyFilter : function(obj,key){
        var fData = [];
        if (this.filteredData.length == 0)
            this.filteredData = this.data;
        if (obj){
            var fObj = {};
            if (!angular.isArray(obj)){
                fObj[key] = obj;
                fData = fData.concat($filter('filter')(this.filteredData,fObj));
            } else if (angular.isArray(obj)){
                if (obj.length > 0){
                    for (var i=0;i<obj.length;i++){
                        if (angular.isDefined(obj[i])){
                            fObj[key] = obj[i];
                            fData = fData.concat($filter('filter')(this.filteredData,fObj));    
                        }
                    }
                }
            }
            if (fData.length > 0){
                this.filteredData = fData;
            }
        }
    }
};
if (keyObj){
    angular.forEach(keyObj,function(obj,key){
        filterObj.applyFilter(obj,key);
    });
}
return filterObj.filteredData;}}]);

1 个答案:

答案 0 :(得分:0)

我对代码做了一些更改,现在对我有用,希望它对你也有用!

myApp.filter('filterMultiple',['$filter',function ($filter) {return function (items, keyObj) {
        var x = false;
        var filterObj = {
            data:items,
            filteredData:[],
            applyFilter : function(obj,key){
                var fData = [];
                if (this.filteredData.length == 0 && x == false)
                    this.filteredData = this.data;
                if (obj){
                    var fObj = {};
                    if (!angular.isArray(obj)){
                        fObj[key] = obj;
                        fData = fData.concat($filter('filter')(this.filteredData,fObj));
                    } else if (angular.isArray(obj)){
                        if (obj.length > 0){
                            for (var i=0;i<obj.length;i++){
                                if (angular.isDefined(obj[i])){
                                    fObj[key] = obj[i];
                                    fData = fData.concat($filter('filter')(this.filteredData,fObj));    
                                }
                            }
                        }
                    }
                    if (fData.length > 0){
                        this.filteredData = fData;
                    }
                    if (fData.length == 0) {
                        if(obj!= "" && obj!= undefined)
                        {
                            this.filteredData = fData;
                            x = true;
                        }
                    }

                }
            }
        };
        if (keyObj){
            angular.forEach(keyObj,function(obj,key){
                filterObj.applyFilter(obj,key);
            });
        }
        return filterObj.filteredData;}}]);
相关问题