javascript - angularjs: custom filter in ng-repeat -


इस तरह से एक सूची लें:

  var list = [{status: true, name : 'बार'}, {स्थिति: सही, नाम: 'फू'}, {स्थिति: गलत, नाम: 'जॉन'}];  

अब मैं केवल उन नामों को सूचीबद्ध करना चाहता हूं जहां स्थिति === सच

इसलिए मैंने निम्न HTML का निर्माण किया:

 <कोड> & lt; ul & gt; & Lt; li एनजी-दोहराने = "सूची में आइटम | पूर्ण" & gt; {{Item.name}} & lt; / li & gt; & Lt; / ul & gt;  

और फ़िल्टरिंग के लिए कोड:

  कोणीय। मॉड्यूल ('MyApp') .फिल्टर ('पूर्ण', फ़ंक्शन) {var filtered = [ ] वापसी समारोह (आइटम) {anuglar.forEach (आइटम, कार्य (आइटम) {यदि (item.status === सच) {filtered.push (आइटम);}} फ़िल्टर्ड फ़िल्टर;}});  

मैंने जो गौर किया है वह है कि फिल्टर फ़ंक्शन को 3 बार कहा जाता है (जो कि सूची सरणी की लंबाई होती है)। लेकिन, यह सिर्फ 1 बार क्यों नहीं होना चाहिए? क्या मेरे में कुछ गड़बड़ है कोड क्योंकि अन्यथा यह बहुत अनुकूलित नहीं लग रहा है!!

फिल्टर फ़ंक्शन प्रत्येक पचाने के लिए एक बार चलाता है (प्रत्येक डाइजेस्ट चक्र में एक से अधिक डाइजेस्ट हो सकता है)।

यहां एक डेमो प्लंकर है:

आप इस तरह एक साधारण फिल्टर लिख सकते हैं:

 < कोड> एप .फिल्टर ('पूर्ण', फ़ंक्शन () {रिटर्न फ़ंक्शन (आइटम) { वापसी आइटम.फिल्टर (फ़ंक्शन (आइटम) {रिटर्न आइटम.स्टैटस === सच; }); }; });  

यदि आप प्रदर्शन के बारे में ध्यान रखते हैं, तो आप इसे नियंत्रक के अंदर प्रीफिल्टर कर सकते हैं:

  $ scope.filteredList = $ scope.list.filter ( फ़ंक्शन (आइटम) {रिटर्न आइटम.स्टेटस === सच;});  

और फिर फ़िल्टर्ड सूची को फिर से दोहराएं:

  & lt; li ng-repeat = "आइटम में फ़िल्टर किया गया आइटम सूची द्वारा सूची।" & Gt;  

Comments