Arrays 使用复选框和AngularJS筛选ng重复列表

Arrays 使用复选框和AngularJS筛选ng重复列表,arrays,angularjs,checkbox,filter,angularjs-filter,Arrays,Angularjs,Checkbox,Filter,Angularjs Filter,我读过很多关于这方面的帖子,它们都倾向于描述独特的复杂解决方案。我只想根据我点击的复选框过滤一个项目列表(我需要一个“和”过滤器&在点击复选框之前能够看到所有项目) 这似乎对AngularJS来说应该是小菜一碟,但我就是不明白。如何修改代码以使筛选工作正常 这是我不完整的JSFIDLE: 这里更新了小提琴: 提前谢谢你 <div ng-controller="MyCtrl"> <li class="no-decoration" ng-repeat="tech in techno

我读过很多关于这方面的帖子,它们都倾向于描述独特的复杂解决方案。我只想根据我点击的复选框过滤一个项目列表(我需要一个“和”过滤器&在点击复选框之前能够看到所有项目)

这似乎对AngularJS来说应该是小菜一碟,但我就是不明白。如何修改代码以使筛选工作正常

这是我不完整的JSFIDLE:

这里更新了小提琴

提前谢谢你

<div ng-controller="MyCtrl">
<li class="no-decoration" ng-repeat="tech in technologyArray">
    <label>
        <input type="checkbox" ng-model="strict" />{{tech}}</label>
</li>
<hr>
<div ng-repeat="portfolioItem in portfolioArray | filter:strict" class="ng-scope">
     <h3>{{portfolioItem.name}}</h3>

</div>

}我想我已经用一种相当简单的方法解决了这个问题:

您遇到的问题是,复选框在真/假值系统上工作,而基本筛选器正在查找匹配数据。因此,您需要创建某种自定义过滤器,将复选框状态映射到数据本身。我使用了这个基本功能,它只是比较复选框状态和它们对应的名称,以及它们是否与技术列表关联

$scope.myFunc = function(a) {
    for(tech in $scope.technologyArray){
        var t = $scope.technologyArray[tech];
        if(t.on && a.technology.indexOf(t.name) > -1){
            return true;   
        }               
    }
};
编辑:更新

我在这里更新了小提琴:


基本上做了两件事。第一个是使用
ng change
监视复选框,以便在未选中复选框时显示所有结果。第二个问题是,过滤器功能已更新,仅显示包含所有选定技术的项目。

这是一个很好的功能。我唯一的问题是,在单击复选框之前,如何让它最初显示所有项目。并充当“和”过滤器(因此,如果单击三种技术,则仅显示具有所有这三种技术的项目)?我根据你的建议更新了我的小提琴:太完美了!这正是我希望做的,而且非常有意义。我想你刚刚创建了一个最简单的例子,我已经看过10多个其他例子了。非常感谢。我已经通过JSFIDLE检查了建议的解决方案。它给了我“ReferenceError:t未定义”的错误。“你能帮个忙吗?我刚检查了小提琴,我觉得很好。”MattWay我用你的解决方案过滤了一张大桌子,效果很好。唯一的问题是我无法跟踪过滤对象的数量。我不想创建任何新数组并将过滤对象推送到它。有什么简单的方法吗?
$scope.myFunc = function(a) {
    for(tech in $scope.technologyArray){
        var t = $scope.technologyArray[tech];
        if(t.on && a.technology.indexOf(t.name) > -1){
            return true;   
        }               
    }
};