AngularJS按对象原型函数过滤

时间:2014-10-05 11:49:51

标签: angularjs angularjs-ng-repeat angularjs-filter

我想使用在repeat项目的原型上定义的函数来过滤ng-repeat,但我找不到任何引用说明这是否真的可行。像

这样的东西
<div ng-repeat="user in users | filter:{'isAdmin()': true} | orderBy:'getFullName()'">
    {{user.getFullName()}}
</div>

其中isAdmin返回一个布尔值。 orderBy使用这种表示法,但过滤器似乎不适用于我尝试的任何表示法。有没有办法在没有检查isAdmin()?

的单独函数的情况下完成此任务

1 个答案:

答案 0 :(得分:1)

你可以调用控制器中定义的函数:

$scope.isAdmin = function(x) {
    if (x.name == 'bob') {
      return true;  
    }
 }

该函数必须返回true或false。

并在你的html中使用它:

<div ng-repeat="user in users | filter:isAdmin | orderBy:'getFullName()'">
    {{user.getFullName()}}
</div>

创建 custome filter ,例如:

app.filter('isAdmin', [function() {
    return function(users) {
      var filtered = [];
      for (var i = 0; i < users.length; i++) {
        var user = users[i];

        //here you can use what ever function you want to check if user is admin
        if (user.name == 'bob') {
          filtered.push(user);
        }
      }
      return filtered;
    };
  }
]);

并在您的HTML中使用它,如下所示:

<div ng-repeat="user in users | isAdmin | orderBy:'getFullName()'">
    {{user.getFullName()}}
</div>

这是 plnkr