Angularjs AngluarJS:在控制器中使用过滤器

Angularjs AngluarJS:在控制器中使用过滤器,angularjs,Angularjs,我有一个控制器: angular.module('myApp', []) .controller('testCtrl', ['$scope', '$filter', function($scope, $filter) { $scope.users = [{ name: "Hanna", gender: "female" }, { name: "Martin", gender: "male"

我有一个控制器:

angular.module('myApp', [])
  .controller('testCtrl', ['$scope', '$filter',
    function($scope, $filter) {
      $scope.users = [{
        name: "Hanna",
        gender: "female"
      }, {
        name: "Martin",
        gender: "male"
      }, {
        name: "Kim",
        gender: "transgender"
      }];

      $scope.traditionalUsers = $filter('filter')($scope.users,femaleOrMale());

      function femaleOrMale(user) {
        return ['female','male'].indexOf(user.gender);
      }
    }
  ]);
我想筛选属性与数组匹配的用户。这是行不通的。看见如何正确调用筛选器?

删除
()

在中写入
femaleOrMale()
时,调用的是
femaleOrMale
函数,没有任何参数

$scope.traditionalUsers = $filter('filter')($scope.users, femaleOrMale());
将函数本身传递给过滤器所写的是

$scope.traditionalUsers = $filter('filter')($scope.users, femaleOrMale);
这将使页面不再抛出错误,但是它不会以传统用户的身份显示
男性
女性
,我怀疑这正是您想要的。您需要从
femaleOrMale
过滤器返回一个布尔值,
indexOf
返回匹配的索引,如果没有匹配,则返回
-1
,因此比较
-1

return ['female','male'].indexOf(user.gender) != -1;
angular.module('myApp',[])
.controller('testCtrl',['$scope','$filter',
函数($scope$filter){
$scope.users=[{
姓名:“汉娜”,
性别:“女性”
}, {
姓名:“马丁”,
性别:“男性”
}, {
姓名:“金”,
性别:“变性人”
}];
$scope.traditionalUsers=$filter($filter')($scope.users,femaleOrMale);
函数femaleOrMale(用户){
返回['female','male'].indexOf(user.gender)!=-1;
}
}
]);

男性和女性用户:
{{traditionalUsers}}

@EricC请考虑导入您正在使用的特定过滤器,即
filterFilter
而不是
$filter
,以简化单元测试。