我有一个打印列表项的ng-repeat。我想要编写一个自定义筛选器,以便只有在某个条件为真时才打印列表项。
我似乎有结构错误,因为它似乎变量没有通过过滤器。
index.php
<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
userApp.filter('matchAccessLevel', function() {
return function( item, userAccessLevel, minAccessLevel ) {
if( userAccessLevel >= minAccessLevel ) {
return item;
}
}
});
发布于 2013-03-04 16:18:28
过滤器不会对数组中的单个项起作用,它们会将整个数组转换为另一个数组。
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
**始终检查函数的参数。值是什么并不总是显而易见的。
发布于 2016-03-16 05:27:14
您可以使用Array.filter来获得更简洁的解决方案:
app.filter('matchAccessLevel', function() {
return function( items, userAccessLevel ) {
return items.filter(function(element){
return userAccessLevel >= element.minAccess;
});
}
});
发布于 2015-10-01 21:11:13
对于CoffeeScript爱好者:
userApp.filter 'matchAccessLevel', ->
(items, userAccessLevel) ->
item for item in items when userAccessLevel >= item.minAccess
https://stackoverflow.com/questions/15196161
复制相似问题