Javascript 基于IDs动态列表的角度滤波器

Javascript 基于IDs动态列表的角度滤波器,javascript,angularjs,angular-filters,Javascript,Angularjs,Angular Filters,在我的Angular应用程序中,我想根据我已经动态生成的ID列表,使用ng repeat过滤下拉按钮上生成的项目 此列表基本上是一个数字数组,可以使用$scope.$watchCollection动态更新,例如: $scope.selectedBPs = [1, 2] 我在前面提到的dropdwon按钮上使用ng repeat生成的每个项目都有一个id属性。我希望筛选器只在$scope.selectedBPs包含其id时显示特定项 目前我的HTML是: <ul class="dropdo

在我的Angular应用程序中,我想根据我已经动态生成的ID列表,使用
ng repeat
过滤下拉按钮上生成的项目

此列表基本上是一个数字数组,可以使用
$scope.$watchCollection
动态更新,例如:

$scope.selectedBPs = [1, 2]
我在前面提到的dropdwon按钮上使用
ng repeat
生成的每个项目都有一个id属性。我希望筛选器只在
$scope.selectedBPs
包含其id时显示特定项

目前我的HTML是:

<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
    <li ng-repeat="marker in vm.markers" ng-click="progressMarkerSelected.name = marker.name;">
        <a href role="menuitem" tabindex="-1">{{marker.name}}</a>
    </li>
</ul>
因此,基本上,我只希望标记出现在
$scope.selectedBPs.indexOf(marker.bpId)>-1
(bpId是项的id)的情况下

是否可以使用过滤器进行此操作


如何将
$scope.selectedBPs
传递给angular筛选器,以便在列表更改时动态更新下拉列表?

您可以在angular中创建自己的自定义筛选器,它可以执行任何您想要的操作,语法很简单,例如:ng repeat=“marker in vm.markers | filter:myAmazingFilter”

在这个自定义过滤器中,您将接收iterable项作为参数,因此您可以进行测试以显示或不显示

请参见下面的示例:

var-app=angular.module(“app”,[]);
app.controller('ListCtrl',函数($scope){
$scope.cars=[
{
id:1,
“名称”:“野马”
},
{
id:2,
“名称”:“克尔维特”
},
{
id:3,
“姓名”:“卡马罗”
},
{
id:4,
“名称”:“福特GT”
}
];
$scope.selectedds=[1,3];
$scope.myCustomFilter=函数(项){
如果($scope.selectedds.indexOf(item.id)>=0){//如果item.id是Mustang或Camaro,则返回true
return true;//return true以重复方式显示项目
}
返回false;
}
});

  • {{car.name}

那么您想在情况或特定条件下从阵列中删除项目吗?如果我理解正确,你可以用过滤器来做。因此,仅显示所选BPS中存在的项目。将项目传递给筛选器,如so{{marker in vm.markers | bpsFilter:selectedBPs}},然后在筛选器中接收字段,如果需要示例,请告诉我哦,这样筛选器就可以是我在控制器中声明的函数?非常感谢。