请求ID上的角度重复过滤器

时间:2017-08-28 09:08:31

标签: angularjs filter angularjs-ng-repeat

我有一条像mysite.com/api/getlist/id=10

这样的路径

我有一个ng-repeat我希望从列表中删除路径中id值请求的值。

我尝试

ng-repeat="player in type2.players  | filter:{ player.id: '!' + $location.search().id }"

但它没有用。

2 个答案:

答案 0 :(得分:0)

问题是$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"

答案 1 :(得分:0)

根据您的要求,您可以在控制器上定义自定义过滤器表达式,并将其传递给模板中的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>