【问题标题】:angular repeat filter on request id请求 id 上的角度重复过滤器
【发布时间】:2025-12-04 21:25:01
【问题描述】:
我有一个类似mysite.com/api/getlist/id=10的路径
我有一个ng-repeat,我想从列表中删除路径中 id 值请求的值。
我试试
ng-repeat="player in type2.players | filter:{ player.id: '!' + $location.search().id }"
但它不起作用。
【问题讨论】:
标签:
angularjs
filter
angularjs-ng-repeat
【解决方案1】:
问题是$location 不在范围内。但是您不应该将其添加到范围中,这是一种不好的做法。更好的解决方案是记住在控制器中搜索id 或过滤数组:
控制器:
myApp.controller('MyController', ['$scope', '$location', function($scope, $location) {
$scope.searchId = $location.search().id;
}]);
查看:
ng-repeat="player in type2.players | filter:{ player.id: !searchId }"
或者:
在控制器中过滤数组,在视图中使用过滤数组:
控制器:
$scope.filteredPlayers = type2.players.filter(player => player.id !== searchId);
查看:
ng-repeat="player in type2.filteredPlayers"
【解决方案2】:
根据您的要求,您可以在控制器中定义自定义过滤器表达式并将其传递给模板中的filter。
控制器:
$scope.filterCondition = function(item) {
return item.name !== $location.search().id; // custom filter condition
}
模板:
ng-repeat="player in type2.players | filter: filterCOndition"
参考下面的例子:
angular.module("app", [])
.controller("myCtrl", function($scope) {
$scope.items = [
{
name: 'test1'
},{
name: 'test2'
},{
name: 'test3'
},{
name: 'test4'
},{
name: 'test5'
}
];
$scope.filterCOndition = function(item) {
return item.name !== 'test1';
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.5/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<div ng-repeat="item in items | filter: filterCOndition">
{{item.name}}
<div>
</div>