2013-02-25 20 views
16

मैंने अपने angularjs प्रोजेक्ट के लिए निम्न फ़िल्टर http://jsfiddle.net/tUyyx/ के समान कस्टम फ़िल्टर बनाया है।Angularjs फ़िल्टर त्रुटि: "त्रुटि: अज्ञात प्रदाता: textProvider"

myapp.filter('truncate',function(text,length){ 
    var end = "..." 
    text = text.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 
    if (isNaN(length)) 
    length = 23; 



    if (text.length <= length || text.length - end.length <= length) { 
     return text; 
    } 
    else { 
     return String(text).substring(0, length-end.length) + end; 
    } 

}); 

लेकिन जब मैं फिल्टर का उपयोग मैं निम्न त्रुटि

Error: Unknown provider: textProvider <- text <- truncateFilter 
    at Error (<anonymous>) 
    at http://localhost/javascripts/lib/angular.min.js:28:236 
    at Object.c [as get] (http://localhost/javascripts/lib/angular.min.js:26:13) 
    at http://localhost/javascripts/lib/angular.min.js:28:317 
    at c (http://localhost/javascripts/lib/angular.min.js:26:13) 
    at Object.d [as invoke] (http://localhost/javascripts/lib/angular.min.js:26:147) 
    at http://localhost/javascripts/lib/angular.min.js:28:335 
    at Object.c [as get] (http://localhost/javascripts/lib/angular.min.js:26:13) 
    at http://localhost/javascripts/lib/angular.min.js:99:481 
    at o (http://localhost/javascripts/lib/angular.min.js:66:471) 

मैं इस तरह मेरी मॉड्यूल बनाया है मिलता है।

var myapp = angular.module('myapp', ['ngResource']); 

मैं क्या गलत कर रहा हूं?

उत्तर

34

यदि आप उस जेएसफ़िल्ड में कोड देखते हैं, तो फ़िल्टर फ़ंक्शन एक फ़ंक्शन देता है जो text आदि को तर्क के रूप में लेता है।

myapp.filter('truncate',function(){ 
    return function(text, length) { 
     var end = "..." 
     text = text.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 
     if (isNaN(length)) 
     length = 23; 



     if (text.length <= length || text.length - end.length <= length) { 
      return text; 
     } 
     else { 
      return String(text).substring(0, length-end.length) + end; 
     } 
    } 
}); 

कारण आप मिल गया "अज्ञात प्रदाता: textProvider" है, क्योंकि आप अपने फिल्टर करने के लिए एक तर्क के रूप text है वह कुछ इस तरह होना चाहिए। इससे text नामक एक सेवा के लिए कोणीय दिखता है जो अस्तित्व में नहीं है। यह वह फ़ंक्शन है जिसे आप वापस करते हैं जो text को तर्क के रूप में लेता है।

इस तरह से सोचें, पहला फ़ंक्शन (जिसे आप angular.filter में पास करते हैं) वह फ़ंक्शन है जो पहले फ़िल्टर बनाता है। वह फ़ंक्शन केवल आपके एप्लिकेशन में एक बार निष्पादित किया जाता है। उस फ़ंक्शन की ज़िम्मेदारी एक और फ़ंक्शन बनाना और इसे वापस करना है, और जो फ़ंक्शन वह देता है वह आपका फ़िल्टर है। आपके पास एक फ़ंक्शन लौटने वाला एक फ़ंक्शन है जो आपको अपने सिस्टम के आधार पर विभिन्न कार्यान्वयन वापस करने देता है। शायद इस तरह कुछ:

myapp.filter('truncate', function(myService) { 
    if (myService.someCondition()) { 
     return function(text, length) { 
      // return the text as usual 
     } 
    } else { 
     return function(text, length) { 
      // return the text and do some other things as well 
     } 
    } 
}); 
संबंधित मुद्दे