首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >AngularJS -如何使用ng-repeat构建自定义筛选器以有条件地返回项目

AngularJS -如何使用ng-repeat构建自定义筛选器以有条件地返回项目
EN

Stack Overflow用户
提问于 2013-03-04 14:58:03
回答 3查看 82.5K关注 0票数 59

我有一个打印列表项的ng-repeat。我想要编写一个自定义筛选器,以便只有在某个条件为真时才打印列表项。

我似乎有结构错误,因为它似乎变量没有通过过滤器。

index.php

代码语言:javascript
复制
<div ng-show="userDetails.username" class="nav">
    <p>Menu</p>
    <li ng-repeat="menuItem in menu | matchAccessLevel:$rootScope.userDetails.accessLevel:menuItem.minAccess | orderBy:'position' ">
        <a ng-href="/angular-app/app/{{menuItem.id}}">{{menuItem.name}}</a>
    </li>
</div>

app.js

代码语言:javascript
复制
userApp.filter('matchAccessLevel', function() {
    return function( item, userAccessLevel, minAccessLevel ) {
        if( userAccessLevel >= minAccessLevel ) {
            return item;
        }
    }
});
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-04 16:18:28

过滤器不会对数组中的单个项起作用,它们会将整个数组转换为另一个数组。

代码语言:javascript
复制
userApp.filter('matchAccessLevel', function() {
  return function( items, userAccessLevel) {
    var filtered = [];
    angular.forEach(items, function(item) {
      if(userAccessLevel >= item.minAccess) {
        filtered.push(item);
      }
    });
    return filtered;
  };
});

查看此plnkr

**始终检查函数的参数。值是什么并不总是显而易见的。

请参阅filters guide

票数 125
EN

Stack Overflow用户

发布于 2016-03-16 05:27:14

您可以使用Array.filter来获得更简洁的解决方案:

代码语言:javascript
复制
app.filter('matchAccessLevel', function() {
    return function( items, userAccessLevel ) {
      return items.filter(function(element){
        return userAccessLevel >= element.minAccess;
      });
    }
});

Check on Plunker

票数 6
EN

Stack Overflow用户

发布于 2015-10-01 21:11:13

对于CoffeeScript爱好者:

代码语言:javascript
复制
userApp.filter 'matchAccessLevel', ->
  (items, userAccessLevel) ->
    item for item in items when userAccessLevel >= item.minAccess
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15196161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档