2013-03-04 13 views
58

वापस करने के लिए ng-repeat के साथ एक कस्टम फ़िल्टर को कैसे व्यवस्थित करें, मेरे पास एक एनजी-दोहराना है जो प्रिंट आइटम सूचीबद्ध करता है। मैं एक कस्टम फ़िल्टर लिखना चाहता हूं ताकि सूची आइटम प्रिंट हो जाए, केवल तभी जब कोई शर्त सत्य हो।AngularJS - आइटम को सशर्त रूप से

मुझे लगता है कि संरचना गलत है क्योंकि ऐसा लगता है कि वेरिएबल फ़िल्टर के माध्यम से पारित नहीं हो रहे हैं।

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; 
     } 
    } 
}); 

उत्तर

124

फिल्टर सरणी में अलग-अलग आइटम पर काम नहीं करते हैं, वे एक और सरणी में पूरे सरणी को बदलने।

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

+1

स्पष्टीकरण के लिए बहुत धन्यवाद। ऐसा लगता है कि मुझे समझ में आया कि फ़िल्टर गलत तरीके से कैसे काम करते हैं। यह बहुत स्पष्ट बना दिया गया है। – Fisu

+0

जो मुझे सही नहीं मिला वह तर्क बात थी। फ़िल्टर के तर्क/पैरामीटर प्रदान करने के बारे में कोई दस्तावेज है? – mrzmyr

+0

हमेशा एक फ़ंक्शन के लिए तर्कों का निरीक्षण करें। यह हमेशा स्पष्ट नहीं होता है कि मूल्य – MurWade

-1

CoffeeScript प्रेमियों के लिए:।

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

आप अधिक संक्षिप्त समाधान के लिए Array.filter उपयोग कर सकते हैं Check on Plunker

संबंधित मुद्दे