2013-02-28 9 views
6

में निर्देशों के साथ फ़िल्टर का उपयोग करना मैं एंगुलरजेएस निर्देश के भीतर फ़िल्टर का उपयोग करने का प्रयास कर रहा हूं लेकिन यह सुनिश्चित नहीं करता कि वास्तव में ऐसा कैसे किया जाए। मेलिंग सूची पर कुछ जानकारी से ऐसा प्रतीत होता है कि आपको $ फ़िल्टर इंजेक्ट करने और इसका उपयोग करने में सक्षम होना चाहिए, लेकिन मुझे यकीन नहीं है कि इसे कैसे/कहां आमंत्रित किया जाए।AngularJS

मेरे निर्देश वर्तमान में इस तरह दिखता है: हालांकि filter:tagFilter

myApp.directive('fancyDisplay', ['$filter', function($filter) { 
    return { 
     scope: { 
      'fancyDisplay': '=' 
     }, 
     template: "<div ng-repeat='datum in fancyDisplay | filter:tagFilter'>{{datum.name}}</div>" 
    }; 
}]); 

काम नहीं कर रहा। मुझे निर्देश में अपना डेटा कैसे फ़िल्टर करना चाहिए?

JSfiddle http://jsfiddle.net/VDLqa/4/ पर उपलब्ध किसी भी प्रतिक्रिया के लिए अग्रिम धन्यवाद।

उत्तर

14

आप निर्देश (scope: { 'fancyDisplay': '=' }) पर एक नया पृथक दायरा बना रहे हैं, जिसका अर्थ है कि आप मूल दायरे से गुणों तक पहुंच नहीं पाएंगे। चूंकि tagFilter को मूल दायरे पर परिभाषित किया गया है, इसलिए आप इसे एक्सेस नहीं कर पाएंगे। निर्देश के लिए एक विशेषता के रूप में

पास tagFilter:

<div fancy-display="model.data" filter="tagFilter"></div> 

और निर्देश पर:

scope: { 
    fancyDisplay: '=', 
    tagFilter: '=filter' 
}, 

jsfiddle: http://jsfiddle.net/bmleite/VDLqa/5/

+0

हम्म ... मैं इसे एकाधिक फ़िल्टर में कैसे बढ़ाऊंगा? – jgm

+0

अधिक atters परिभाषित करें: '

'और निर्देश' स्कोप: {fancyDisplay: '=', filter1: '=', filter2: '='}'। नोट: मैंने उन्हें 'फ़िल्टर 1' और 'फ़िल्टर 2' कहा है लेकिन आप उन्हें जो कुछ भी चाहते हैं उसे कॉल कर सकते हैं। साथ ही, यदि आप कई फ़िल्टर शुरू करते हैं, तो मैं आपको निर्देश पर भेजने से पहले 'ng-model' डेटा को प्री-फ़िल्टर करने की सलाह दूंगा। – bmleite

+0

प्री-फ़िल्टरिंग दिलचस्प है क्योंकि मैंने शुरू किया था। मैंने इसे निर्देश पर ही कोशिश की लेकिन यह काम नहीं किया; मैं इसे प्राप्त करने के लिए पहेली कैसे बदलूँगा? – jgm

1

धन्यवाद आपके उत्तर के लिए @bmleite करने के लिए।

एक और चीज जो मददगार हो सकती है यह सुनिश्चित करना है कि को अपने एनजी-दोहराव निर्देश की घोषणा करना इस तरह की है कि आपने अपनी सूची पर दी है।

यह मुझे हमेशा समझने के लिए ले गया। जाहिर है आप फ़िल्टर कर इससे पहले कि आप एक्स द्वारा ट्रैक उल्लेख करना होगा:

app.directive("someDirective", function(){ ... 

    restrict: "E", 
    ... 
    template:"<ul ng-repeat='t in tree | filter:key track by $index'><li>{{t}}</li></ul>", 

}); 

उलटा काम नहीं करता।