2013-03-04 20 views
58

Ben liste öğeleri yazdırır bir ng tekrarı var. Özel bir filtre yazmak istiyorum, böylece liste öğesi yazdırılacak, ancak bir koşul doğruysa.angularjs - öğeleri döndürmek için ng tekrarı ile özel bir filtre yapısı nasıl koşullu

Yapının, filtreye geçirilmediği değişkenler gibi göründüğü gibi yanlış görünüyorum.

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> 

userApp.filter('matchAccessLevel', function() { 
    return function(item, userAccessLevel, minAccessLevel) { 
     if(userAccessLevel >= minAccessLevel) { 
      return item; 
     } 
    } 
}); 

cevap

124

Filtreler dizisinde ürüne göre çalışmaz, onlar başka diziye Tüm diziyi dönüşümü app.js.

userApp.filter('matchAccessLevel', function() { 
    return function(items, userAccessLevel) { 
    var filtered = []; 
    angular.forEach(items, function(item) { 
     if(userAccessLevel >= item.minAccess) { 
     filtered.push(item); 
     } 
    }); 
    return filtered; 
    }; 
}); 

bu plnkr

** hep bir işleve argümanlar incelemek Bkz. Bu değerlerin ne zaman belli değil

CoffeeScript severler için filters guide

+1

çok teşekkürler. Görünüşe göre filtrelerin yanlış çalıştığı anlaşılıyor. Bu daha net hale getirildi. – Fisu

+0

doğru olmayan şey argüman olayıydı. Filtrenin argümanlar/parametreler sağlama şekliyle ilgili herhangi bir belge var mı? – mrzmyr

+0

her zaman argümanları bir işlevle kontrol edin. Değerlerin ne olduğu her zaman açık değildir – MurWade

-1

bkz *:.

app.filter('matchAccessLevel', function() { 
    return function(items, userAccessLevel) { 
     return items.filter(function(element){ 
     return userAccessLevel >= element.minAccess; 
     }); 
    } 
}); 

:

userApp.filter 'matchAccessLevel', -> 
    (items, userAccessLevel) -> 
    item for item in items when userAccessLevel >= item.minAccess 
5

Bir daha özlü çözüm için Array.filter kullanabilirsiniz açıklama için Check on Plunker