2014-09-16 10 views
5

से दिखाई नहीं दे मूल्य क्यों कोणीय नहीं प्रदर्शन मूल्यों है कि रिक्त हैं जब मैं लागू होंगे:एनजी-दोहराने फिल्टर अशक्त

ng-repeat="p in foo | filter: filter2" 

जहां filter2

$scope.filter2 = function(p){ 
    if (p.state === null){ 
     return p.state; 
    } else{ 
     return; 
    } 
}; 

यहाँ मैं क्या कर रहा हूँ के साथ एक plnkr है कह रहा है: http://plnkr.co/edit/cj3v1fuBu6sHVI7A4qlq?p=preview

फ़िल्टर तब काम करता है जब यह कुछ भी नहीं बल्कि एक नल है लेकिन मैं केवल प्रदर्शित करने के लिए नल वाले लोगों की कोशिश कर रहा हूं। मैं सभी शून्य मानों को शून्य के अलावा किसी डिफ़ॉल्ट मान स्ट्रिंग में बदलने का प्रयास कर सकता हूं? फ़िल्टर को नल के साथ काम करने के लिए कहीं भी है?

+0

अलग समाधान: https://stackoverflow.com/a/24992197/257470 –

उत्तर

6

मुझे लगता है कि केवल एक चीज गलत थी कि आपको पूरी वस्तु को वापस करने की आवश्यकता थी।

नीचे ब्रैड की टिप्पणी के आधार पर, मैं गया और दस्तावेज़ों की जांच की और वह सही है। मेरा कोड नमूना काम करने का एकमात्र कारण यह है कि यह 'सत्य' मान लौटा रहा है।

मैंने इसे ध्यान में रखने के लिए नीचे अपना कोड उदाहरण संशोधित किया है।

$scope.filter2 = function(p){ 
    if (p.state === null){ 
     return true; 
    } else{ 
     return; 
    } 
}; 

यहाँ डॉक्स में प्रासंगिक अनुभाग है:

यहाँ फिल्टर है

समारोह (वास्तविक, उम्मीद): समारोह वस्तु मूल्य और करने के लिए विधेय मूल्य दिया जाएगा अगर फ़िल्टर फ़िल्टर किए गए परिणाम में शामिल किया जाना चाहिए तो तुलना करें और वापस लौटना चाहिए।

plunkr

+0

हाहा, मैं देखता हूं कि आपने क्या किया। आपने p.state की जगह पी वापस कर दिया। अगर यह काम करता है तो यह काम करता है ... जावास्क्रिप्ट में आप एक शून्य मूल्य वापस नहीं कर सकते हैं? मैंने सोचा कि आप कर सकते हैं। – Garuuk

+0

आप कर सकते हैं, लेकिन शायद ng-repeat इसे पसंद नहीं है –

5

| filter:{expression} एक true या false मूल्यांकन, नहीं एक वस्तु की उम्मीद है। इसलिए:

$scope.filter1 = function(p){ 
    return (p.state === 'on'); 
}; 

$scope.filter2 = function(p){ 
    return (p.state === null); 
}; 
14

आप एक कस्टम फिल्टर लिखे बिना अशक्त आइटम फिल्टर कर सकते हैं।

अपने खनखनाहट में कोड का उपयोग करना, इस अशक्त आइटम वापस आ जाएगी:

<ul ng-repeat="p in foo | filter:{state:'!!'}" > 
    <li>{{p.name}}</li> 
</ul> 

डबल नहीं ऑपरेटर किसी भी मूल्य में कनवर्ट करता है:

<ul ng-repeat="p in foo | filter:{state:'!'}" > 
    <li>{{p.name}}</li> 
</ul> 

इसके विपरीत, यह सब गैर-शून्य आइटम वापस आ जाएगी बूलियन के लिए: पहला ऑपरेटर ! एक बूलियन false पर एक सच्चा मूल्य परिवर्तित करता है, दूसरा दूसरा बूलियन को true में बदल देता है। मेरी परीक्षणों में फिल्टर वास्तव में सिर्फ state:'' का उपयोग करके काम करता है, लेकिन मैं !! का प्रयोग करेंगे केवल सुरक्षा के होने के लिए ...

0

आप इस तरह अभिव्यक्ति में अशक्त के लिए परीक्षण कर सकते हैं:

ng-repeat="p in foo | filter:{state:null}" 
संबंधित मुद्दे