【问题标题】: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>

      【讨论】: