2013-01-08 21 views
5

AngularJS के "फ़िल्टर" फ़ंक्शन को समझने की कोशिश कर रहे अधिकांश उदाहरणों में दृश्य/HTML पक्ष पर फ़िल्टर हैं लेकिन मुझे इसे नियंत्रक/जेएस पक्ष पर चाहिए।AngularJS जेएस फ़िल्टर को समझने की कोशिश कर रहा है

यह

$scope.getPickedPeopleCount = function(){ 
    var thisCount = 0; 
    angular.forEach($scope.allPeople, function(person){ 
     if(person.PICKED){thisCount++} 
    }); 
    return thisCount; 
    } 

काम करता है लेकिन इस

$scope.getPickedPeopleCount = function(){ 
    return $scope.allPeople.filter(PICKED:'true').length; 
    } 

जाहिर है विफल रहता है मेरी वाक्य रचना गलत है किसी को सही दिशा

उत्तर

19

में मुझे इंगित कर सकते हैं एक नियंत्रक में एक फिल्टर का उपयोग करने के लिए, आप $ फ़िल्टर सेवा को इंजेक्ट करना होगा और फिर नाम से फ़िल्टर का अनुरोध करना होगा:

function MyCtrl ($scope, $filter) { 
    var filter = $filter('filter'); // could be orderBy, etc. 

    // more code... 

    $scope.getPickedPeopleCount = function() { 
    return filter($scope.allPeople, { PICKED: 'true' }).length; 
    } 
} 
+0

आपको प्रश्न को समझने के लिए बोनस अंक देना चाहिए। –

11

@ जोश के उत्तर के अतिरिक्त, फ़िल्टर (पूर्व परिभाषित कोणीय वाले, और अपने स्वयं के कस्टम वाले) को फ़िल्टरनाम फ़िल्टर सिंटैक्स का उपयोग करके नियंत्रकों, निर्देशों, कस्टम फ़िल्टर इत्यादि में भी इंजेक्शन दिया जा सकता है। जैसे, filterFilter, dateFilter, myCoolSortFilter, आदि $filterProvider डॉक्स से:

फिल्टर समारोह Filter साथ प्रत्यय फिल्टर नाम के तहत $ इंजेक्टर साथ पंजीकृत है।

आप असली निर्भरताओं के बारे में अधिक विशिष्ट हो सकते हैं (हालांकि $ फ़िल्टर इंजेक्शन आपको सभी कोणीय फ़िल्टर तक पहुंच प्रदान करता है)।

function MyCtrl ($scope, filterFilter) { 
    // more code... 

    $scope.getPickedPeopleCount = function() { 
    return filterFilter($scope.allPeople, { PICKED: 'true' }); 
    } 
} 
+0

@ मार्कराजकोक- यह एक अच्छा मुद्दा है। +1 –

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

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