2013-07-15 3 views
54

पर मैं एक एनजी-दोहराने में एक बूलियन मान पर फ़िल्टर करने की कोशिश कर रहा हूं।एनजी-दोहराना फ़िल्टर बूलियन

अपंजीकृत उपयोगकर्ताओं की सूची:

<h3>Unregistered Users</h3> 
    <div ng-repeat="user in users | filter:!user.registered"> 
     <div class="row-fluid"> 
     <div class="span2"> 
      {{user.name}} 
     </div> 
     </div> 
    </div> 

पंजीकृत उपयोगकर्ता की सूची:

<h3>Registered Users</h3> 
    <div ng-repeat="user in users | filter:user.registered"> 
     <div class="row-fluid"> 
     <div class="span2"> 
      {{user.name}} 
     </div> 
     </div> 
    </div> 

वहाँ है एक अच्छा तरीका पंजीकृत और पंजीकृत के आधार पर फ़िल्टर करने के लिए।

उत्तर

108

फिल्टर:

कुछ इस तरह

<h3>Unregistered Users</h3> 
<div ng-repeat="user in users | filter:{registered:false}"> 
    <div class="row-fluid"> 
    <div class="span2"> 
     {{user.name}} 
    </div> 
    </div> 
</div> 

JSFiddle: http://jsfiddle.net/alfrescian/9ytDN/

+23

जब मैं AngularJS 1.2 के साथ इस कोशिश, झूठी अभिव्यक्ति केवल सही ढंग से मूल्यांकन करता है अगर मैं इसे बोली: फिल्टर: {पंजीकृत: 'गलत'} – karlgold

+0

ऐसा लगता है कि यह काम नहीं करता अभी 1.2.2 (स्ट्रिंग या नहीं) में, कोई भी पुष्टि कर सकता है? संपादित करें: कभी नहीं, मेरी समस्या ऑब्जेक्ट पुनरावृत्ति पर फ़िल्टर में है – Guillaume86

+1

नेस्टेड ऑब्जेक्ट्स के लिए सिंटैक्स 1.2 से 1.3 में बदल गया है, यह उत्तर देखें http://stackoverflow.com/a/28160037/595152 –

13

नियंत्रक में एक विधि बनाएं जो आपको आवश्यक तर्क के आधार पर सत्य या गलत लौटाती है और फ़िल्टर में उस फ़ंक्शन को निर्दिष्ट करती है। obj अभिव्यक्ति द्वारा

$scope.isRegistered = function(item) { 
    return item.registered; 
}; 

<h3>Unregistered Users</h3> 
<div ng-repeat="user in users | filter:!isRegistered "> 
    <div class="row-fluid"> 
    <div class="span2"> 
     {{user.name}} 
    </div> 
    </div> 
</div> 
+0

है कहाँ 'चाहिए item' से आ रही:

$scope.users = [ { name : 'user1 (registered)', registered : true }, { name : 'user2 (unregistered)' }, { name : 'user3 (registered)', registered : true }, { name : 'user4 (unregistered)' } 

अपंजीकृत उपयोगकर्ताओं फिल्टर प्राप्त करने के लिए? –

+0

@ZJRollyson आइटम फ़िल्टर विधि 'idRegirstered (आइटम)' का तर्क है। फ़िल्टरिंग विधि को 'उपयोगकर्ता' ऑब्जेक्ट को फ़िल्टर विधि में पास करके और बूलियन रिटर्न वैल्यू का मूल्यांकन करके काम करता है। – Daniel

+2

फ़िल्टर विधि को उलटना संभव नहीं है। आपको फ़िल्टर विधि के अंदर इनवर्टिंग करना होगा: '$ scope.isUnregistered = function (item) {return! Item.registered; }; 'और इस' फिल्टर की तरह उपयोग: isUnregistered' – awe

3

एक ही सवाल था। Alfrescian समाधान Angular 1.1.5 पर मेरे लिए काम नहीं किया था। http://jsfiddle.net/buehler/HCjrQ/

.filter('onlyBooleanValueFilter', [function(){ 
    return function(input, param){ 
     var ret = []; 
     if(!angular.isDefined(param)) param = true; 
     angular.forEach(input, function(v){ 
      // 'active' is a hard-coded field name 
      if(angular.isDefined(v.active) && v.active === param){ 
       ret.push(v); 
      } 
     }); 
     return ret; 
    }; 
}]) 

आप अपने क्षेत्र के अनुसार फिल्टर का कोड को समायोजित करने की आवश्यकता होगी:

इस बेला मिले।

1

Websirnik के जवाब देने के लिए थोड़ा सा संशोधन, इस डेटासेट के लिए किसी भी कॉलम नाम अनुमति देता है:

मार्कअप:

<div repeat="row in your.dataset | onlyBooleanValueFilter: 'yourColumn' : true"> 
    ...your stuff here.... 
</div> 
+0

अच्छा कॉल जज़ज़, धन्यवाद। –

5

मामले में एक आइटम एक बूलियन संपत्ति सेट नहीं है, तो आप पा सकते हैं किसी संपत्ति के साथ आइटम '!' का उपयोग कर सत्य पर सेट नहीं है उद्धरण के साथ। e.x. फ़िल्टर: {संपत्ति: '!' + सच}।

उदाहरण:

<h3>Unregistered Users</h3> 
<div ng-repeat="user in users | filter:{registered:'!'+true}"> 
    <div class="row-fluid"> 
     <div class="span2"> 
      {{user.name}} 
     </div> 
     </div> 
    </div> 
संबंधित मुद्दे