2013-07-17 6 views
5

मुझे कोणीय में सेवाएं मिलीं कि मुझे कॉन्फ़िगर करने योग्य होने की आवश्यकता है, इस तरह से मैं अपने ऐप से युग्मन हटा सकता हूं और अपना कुछ कोड साझा कर सकता हूं।आप angularjs में कॉन्फ़िगर करने योग्य सेवा कैसे बनाते हैं?

मेरा सवाल यह है कि आप इसे कैसे प्राप्त करते हैं?

मॉड्यूल.वल्यू() और निर्भरता इंजेक्शन के साथ? फिर आप एक डिफ़ॉल्ट मूल्य कैसे प्राप्त करते हैं? आप इनिट पर गणना की गई मान को कैसे बनाते हैं और हार्डकोड नहीं करते हैं?

एक और सेवा के साथ? आप इसे सामान्य कैसे बनाते हैं?

क्या आपके पास एक कोड उदाहरण है, क्योंकि मैं इसके साथ थोड़ा सा खो गया हूं।

+0

इनिट में गणना करके और कड़ी मेहनत से गणना करने का क्या मतलब है? आप module.valstant के साथ बनाए गए मानों को अपडेट कर सकते हैं, बस मॉड्यूल.कॉन्स्टेंट नहीं, आप एनजी-इनिट का भी उपयोग कर सकते हैं, आप संभावित रूप से कुछ डेटा को असीमित रूप से ला सकते हैं, फिर इंजेक्शन मॉड्यूल स्थापित करें .value() – shaunhusain

+0

मान लें कि मैं कॉन्फ़िगरेशन मान प्राप्त करना चाहता हूं, बनाना इसके साथ एक असीमित कॉल, एक मूल्य वापस प्राप्त करें और फिर मेरी सेवा में इंजेक्ट करें। –

+0

या तो यदि मैं सही ढंग से समझता हूं, तो आप कुछ कॉन्फ़िगरेशन मान पढ़ते हैं जो पहले मॉड्यूल.वल्यू (कुंजी, मान) कॉल के साथ सेट किया गया था, $ इंजेक्टर.get (कुंजी) को कॉल करके मान को पकड़कर, यदि आप सुनिश्चित नहीं हैं कि इंजेक्टर को उस कुंजी के साथ कॉन्फ़िगर किया गया है जिसे आप एक कोशिश पकड़ने वाले ब्लॉक से घिरा सकते हैं और इसे किसी भी मामले में कुछ डिफ़ॉल्ट दे सकते हैं, आप मॉड्यूल का उपयोग कर सकते हैं .value() फिर से मैं इंजेक्ट करने के लिए किसी भी मान को जोड़ने या बदलने का विश्वास करता हूं। शायद आप अपने अपडेट करने से पहले सेवाओं के मूल्यों को इंजेक्शन देने वाले कोणीय से चिंतित हैं, मेरा मानना ​​है कि $ injector.get() आपके लिए नवीनतम मूल्य पुनर्प्राप्त करेगा। – shaunhusain

उत्तर

1

मेरा मानना ​​है कि कुछ इस तरह, आपकी सेवा के भीतर काम करना चाहिए आप .Value() का उपयोग करने के इंजेक्शन

var myLocalValue = myInjectedValue || "Some default value"; 

के लिए कुछ वस्तुओं की घोषणा करने के मैं सुपर जावास्क्रिप्ट सामान्य बुद्धि नहीं कर रहा हूँ थे लेकिन इस पर जवाब इतना लगता है तथ्य यह है कि यह भी काम करेगा करने के लिए टाल जाना: JavaScript OR (||) variable assignment explanation

मैं काम करने के लिए मैं कैसे उम्मीद करेंगे इसे बाहर ऐसा लगता है परीक्षण करने के लिए यहाँ एक बेला बनाया:

http://jsfiddle.net/u3MY8/1/

जावास्क्रिप्ट

var app = angular.module("myapp",[]); 
// define a value 
app.value('myThing', 'weee'); 

// use it in a service 
app.factory('myService', ['myThing', function(myThing, myOtherThing){ 
    var myLocalOtherThing = myOtherThing || "some default"; 
    return { 
     whatsMyThing: function() { 
      return myThing; //weee 
     }, 
     whatsMyOtherThing: function() { 
      return myOtherThing; 
     }, 
     whatsMyOtherThingWithDefault: function() { 
      return myLocalOtherThing; 
     } 
    } 
}]); 

// use it in a controller 
app.controller('someController', function($scope, myService) { 
    $scope.foo = myService.whatsMyThing(); //weee 
    $scope.bar = myService.whatsMyOtherThing(); //"" 
    $scope.baz = myService.whatsMyOtherThingWithDefault(); //some default 
}); 

एचटीएमएल

<div ng-app="myapp" ng-controller="someController"> 
    <ol> 
     <li>{{foo}}</li> 
     <li>{{bar}}</li> 
     <li>{{baz}}</li> 
    </ol> 
</div> 

यह केवल काम करता है ध्यान दें करने के लिए करता है, तो myOtherThing इंजेक्शन नहीं है, यदि आप सूची यह इंजेक्ट किया जा करने के लिए, लेकिन यह परिभाषित नहीं किया गया आप चलाएंगे त्रुटियों में, लेकिन मुझे यकीन नहीं है कि उपयोग का मामला क्या है।

+0

आप इंजेक्शन के बिना myOtherThing कैसे पास करते हैं? आप मैन्युअल रूप से सेवा सेटअप करते हैं? ऐसा लगता है कि यह angularjs का उपयोग करने के उद्देश्य को हराने? –

+0

ठीक है इसलिए मैंने कुछ बार बेवकूफ अपडेट किया क्योंकि मैं देख रहा हूं कि आप क्या कह रहे हैं अगर आप इसे बिना किसी त्रुटि के इंजेक्ट कर सकते हैं यह जाने बिना कि यह घोषित किया गया था तो आप डिफ़ॉल्ट नहीं कर सकते ... इसके बजाय मैं उपयोग कर रहा हूं सेवा (।) सेवा के लिए $ इंजेक्टर सेवा, और इसे घोषित करने के मामले में इसे पकड़ने के लिए प्रयास करें। http://jsfiddle.net/u3MY8/3/ – shaunhusain

+0

ठीक है, मैं +1 कर दूंगा क्योंकि यह काम करेगा (कम से कम सिंक्रनाइज़), लेकिन मैं कल्पना नहीं कर सकता कि यह करने का सही तरीका होगा। एक और तरीका होना चाहिए ... –

7

कॉन्फ़िगर करने योग्य सेवा बनाने के लिए, आपको provider का उपयोग करने की आवश्यकता है, देखें: http://docs.angularjs.org/guide/providers। प्रदाता आपको तत्काल होने से पहले मॉड्यूल के कॉन्फ़िगर ब्लॉक में फ़ैक्टरी या सेवा को कॉन्फ़िगर करने की अनुमति देते हैं। एक साधारण उदाहरण के लिए, एक और अधिक पूरा/कैसे विन्यास सेवाओं का उपयोग करने, मैं the Restangular project है, जो भी मूलभूत मूल्यों कि एप्लिकेशन डेवलपर द्वारा ओवरराइड किया जा सकता प्रदान करने की एक विधि को दर्शाता है पर रखने का सुझाव देते हैं की जटिल उदाहरण के लिए http://plnkr.co/edit/QMLBBQ3obE90FtCA2eBu

देखते हैं।

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