Angularjs 如何组合这些自定义过滤器?

Angularjs 如何组合这些自定义过滤器?,angularjs,angularjs-ng-repeat,angularjs-filter,Angularjs,Angularjs Ng Repeat,Angularjs Filter,我正在尝试使用这段代码创建一个过滤机制,它可以完美地(独立地)工作: 而ng重复是: ng-repeat="item in filtered=(reportsData | filter:filterByPackage)" 如果我用filterByPackage或filterByCategory替换filter: Im使用此代码迭代键并创建复选框以切换项目的可见性: <label ng-repeat="cat in getCategories()">

我正在尝试使用这段代码创建一个过滤机制,它可以完美地(独立地)工作:

而ng重复是:

    ng-repeat="item in filtered=(reportsData | filter:filterByPackage)"
如果我用filterByPackage或filterByCategory替换filter:

Im使用此代码迭代键并创建复选框以切换项目的可见性:

<label ng-repeat="cat in getCategories()">
                <input type="checkbox" ng-model="filter[cat]" />{{cat}}</label>

然后单击复选框使整个列表消失。正确组合这两个过滤器的语法是什么?

如果您选择了一个类别和一个包,您只想显示与这两个类别匹配的reportData

您遇到的问题是,您将“filter”对象用于这两种类型的筛选,并且这与noFilter函数结合使用,noFilter函数还验证是否在筛选器上检查了任何内容,从而导致您需要选择与要显示的reportData完全匹配的包和类别(不能将过滤器保持为未选中状态或不显示任何过滤器)

您可以将过滤器初始化为每个条件都是成员的对象,并按如下方式使用它们:

$scope.filter = { packages: {}, categories: {}};

return $scope.filter.categories[reportsData.type] || noFilter($scope.filter.categories);

<label ng-repeat="cat in getCategories()">
    <input type="checkbox" ng-model="filter.categories[cat]" />{{cat}}
</label>
$scope.filter={packages:{},categories:{};
返回$scope.filter.categories[reportsData.type]| | noFilter($scope.filter.categories);
{{cat}}

如果选择一个类别和一个包,您只想显示与这两个类别和包匹配的reportData

您遇到的问题是,您将“filter”对象用于这两种类型的筛选,并且这与noFilter函数结合使用,noFilter函数还验证是否在筛选器上检查了任何内容,从而导致您需要选择与要显示的reportData完全匹配的包和类别(不能将过滤器保持为未选中状态或不显示任何过滤器)

您可以将过滤器初始化为每个条件都是成员的对象,并按如下方式使用它们:

$scope.filter = { packages: {}, categories: {}};

return $scope.filter.categories[reportsData.type] || noFilter($scope.filter.categories);

<label ng-repeat="cat in getCategories()">
    <input type="checkbox" ng-model="filter.categories[cat]" />{{cat}}
</label>
$scope.filter={packages:{},categories:{};
返回$scope.filter.categories[reportsData.type]| | noFilter($scope.filter.categories);
{{cat}}

语法是正确的…如果这是您所期望的,它们将不会是一个OR条件。如果没有复制问题的工作演示,很难提供帮助。太多未知语法是正确的…如果这是您所期望的,它们将不会是一个OR条件。如果没有复制问题的工作演示,很难提供帮助。太多未知感谢Fredy!这是我的示例ct问题!Fredy,我必须将reportsData.package更改为数组,因为每个报表可能属于多个包。我如何更改代码以接受多个值?我还没有测试过这一点,但如果您希望在任何包与筛选器匹配的情况下包含报表,这可能会对您有所帮助:有些代码可以简化很多通过使用像jquery这样的库。谢谢,这非常有效!不幸的是,我的架构师想要使用纯js。谢谢Fredy!这正是我的问题!Fredy,我必须将reportsData.package更改为数组,因为每个报表可能属于多个包。我如何更改代码以接受多个值?我还没有测试过这个,bu如果您希望在任何包与过滤器匹配的情况下包含报告,那么它可能会对您有所帮助:使用jquery之类的库可以大大简化一些代码。谢谢,这非常有效!不幸的是,我的架构师希望使用纯js。
$scope.filter = { packages: {}, categories: {}};

return $scope.filter.categories[reportsData.type] || noFilter($scope.filter.categories);

<label ng-repeat="cat in getCategories()">
    <input type="checkbox" ng-model="filter.categories[cat]" />{{cat}}
</label>