2014-07-07 5 views
9

मैं कोणीय के साथ मेरी पहली चरणों रहा हूं परिभाषित करने के लिए सबसे अच्छा अभ्यास है, और मैं, एक उपयोगिता सहायक पुस्तकालय परिभाषित करने की जरूरत समारोह तरीकों के एक जोड़े के साथ की तरहAngular.js - एक उपयोगिता पुस्तकालय

dataHelper.parse, dataHelper.sanitize कुछ , आदि

कोणीय में इसे व्यवस्थित करने के लिए अनुशंसित तरीका क्या होगा?

उत्तर

16

उपयोगिता विधियों के लिए, मैं उन्हें कोणीय ढांचे के बाहर एक पुस्तकालय में व्यवस्थित करता हूं, लेकिन angular.extend पर एक छोटी निर्भरता के साथ। यदि आप अपनी लाइब्रेरी को कोणीय से पूरी तरह से स्वतंत्र करना चाहते हैं, तो आप अपने कार्यान्वयन के साथ extend को प्रतिस्थापित कर सकते हैं।

एक जावास्क्रिप्ट बाड़े में अपने उपयोगिता एपीआई लपेटें और window की एक संपत्ति के रूप में अपने पुस्तकालय का पर्दाफाश (नीचे उदाहरण में, मैं अपने पुस्तकालय MyLibrary नाम दिया है, लेकिन आप का चयन करने के जो भी नाम आप की तरह स्वतंत्र हैं)। window की संपत्ति के रूप में अपनी लाइब्रेरी को जोड़कर, आप योग्यता के बिना 'myLibrary' को संदर्भित करने में सक्षम होंगे। यदि आप उत्सुक हैं, तो यह ठीक है कि कोणीय लाइब्रेरी का खुलासा हुआ है।

(function (window, document) { 
    'use strict'; 

    // attach myLibrary as a property of window 
    var myLibrary = window.myLibrary || (window.myLibrary = {}); 

    // BEGIN API 
    function helloWorld() { 
     alert('hello world!'); 
    } 

    function utilityMethod1() { 
     alert('Utility Method 1'); 
    } 

    function utilityMethod2() { 
     alert('Utility Method 2'); 
    } 
    // END API 

    // publish external API by extending myLibrary 
    function publishExternalAPI(myLibrary) { 
     angular.extend(myLibrary, { 
      'helloWorld': helloWorld, 
      'utilityMethod1': utilityMethod1, 
      'utilityMethod2': utilityMethod2 
     }); 
    } 


    publishExternalAPI(myLibrary); 

})(window, document); 

प्रयोग

एक बार स्क्रिप्ट जोड़ा जाता है, आप कहीं से भी अपने पुस्तकालय का उपयोग कर सकते हैं - सेवाओं, कारखानों, प्रदाताओं, नियंत्रक, निर्देशों आदि

<script type='text/javascript' src='angular.js'></script> 
<script type='text/javascript' src='myLibrary.js'></script> 

<script> 
     myLibrary.helloWorld(); 
     myLibrary.utilityMethod1(); 
     myLibrary.utilityMethod2(); 
</script> 

उपयोगिता पुस्तकालय बनाम कोणीय सेवाएं

कारण मैं उपयोगिता पसंद करता हूं कोणीय सेवाओं की बजाय अपनी पुस्तकालय में रहने के लिए कार्य है क्योंकि मैं उन्हें कोणीय पारिस्थितिक तंत्र से अलग होने के बारे में सोचता हूं। ये उपयोगिता कार्य बहुत अधिक अकेले हैं और मॉड्यूल अज्ञेयवादी हैं, जबकि कोणीय सेवाएं/कारखानियां कोणीय के अन्य हिस्सों के साथ मिलकर काम करती हैं, जिसमें नियंत्रक और निर्देश शामिल हैं, और मॉड्यूल से बहुत निकटता से जुड़े हुए हैं।

विस्तार कोणीय

तुम सच में चाहते हैं तो आपके भी कोणीय पुस्तकालय खुद का विस्तार कर सकते हैं। स्क्रिप्ट में angular के साथ बस myLibrary को प्रतिस्थापित करें (नोट: यह सलाह नहीं दी जा सकती है क्योंकि यह आपकी स्क्रिप्ट को कोणीय कार्यान्वयन पर निर्भर करेगी)।

+1

यह वास्तव में एक बहुत अच्छा विचार है। बाहरी कोड में एक कोणीय सेवा का उपयोग करने का कोई तरीका है? – Sprottenwels

+0

वहाँ है, लेकिन आपको कोणीय के $ इंजेक्टर का उपयोग करने की आवश्यकता होगी: var $ injector = angular.injector(); var myService = $ injector.get ('myService'); – pixelbits

+0

मुझे एपीआई कार्यों से एक मूल्य वापस करने में परेशानी हो रही है। मैंने पुष्टि की है कि एपीआई फ़ंक्शन को कॉलर से कॉल किया जाता है, वापसी मान * अपरिभाषित * है। क्या मुझे कुछ याद आती है? – Unplug

0

एक कस्टम service

globalModule.service('toolkit',function(){ 

return{ 

    getDate: function(altFormat){ 
     var today = new Date(); 
     var dd = today.getDate(); 
     var mm = today.getMonth()+1; //January is 0! 

     var yyyy = today.getFullYear(); 
     if(dd<10){dd='0'+dd} if(mm<10){mm='0'+mm} today = yyyy +'-'+ mm+'-'+dd; 

     if(altFormat){ 
      today = today.replace(/-/g, '.'); 
     } 

     return today; 
    }, 

    /** 
    * Returns a 32 character ID [ XXXXXXXX - XXXXXXXXXXXXXXXXXXXXXXXX ] 
    * @returns {string} 
    */ 

    newGUID: function(){ 

     // ... 
    } 

    }; 
}); 

आप इसे इंजेक्षन कर सकते हैं जहाँ भी यह आवश्यक है बनाएँ। यदि आप कुछ तर्कों को अलग सेवाओं में बंडल कर सकते हैं (उदा। parseService) मुझे लगता है कि आपको ऐसा करना चाहिए।

यदि आपको कुछ अधिक लचीला या कॉन्फ़िगर करने योग्य की आवश्यकता है, तो प्रदाताओं पर एक नज़र डालें।

+0

यह downvoted किया गया था।डाउनवॉटर इस उत्तर को बेहतर बनाने के लिए किसी भी सुझाव के बारे में सुनकर मुझे खुशी होगी। – Sprottenwels

+0

इसका एक नकारात्मक हिस्सा यह है कि आप इसे कॉन्फ़िगर ब्लॉक में उपयोग नहीं कर सकते हैं। –

0

, @pixelbits 'जवाब का विस्तार करने के लिए यदि आप अपने बाहरी निर्भरता स्पष्ट रखना चाहते हैं, तो आप काफी आसानी से मौजूदा पुस्तकालयों उपयोग के लिए कोणीय के साथ, इस तरह momentjs के लिए लपेट कर सकते हैं:

angular.module('testApp') 
.constant('moment', moment)