एक सेवा को दूसरी सेवा में शामिल करना


जवाबों:


118

हाँ। कोणीयज में नियमित इंजेक्शन नियम का पालन करें।

app.service('service1', function(){});

//Inject service1 into service2
app.service('service2',function(service1){});

@Simon का शुक्रिया। माइनिंग की समस्या से बचने के लिए ऐरे इंजेक्शन का उपयोग करना बेहतर होता है।

  app.service('service2',['service1', function(service1) {}]);

20
मैं सुझाव देता हूं कि जब आप भविष्य में अपनी स्क्रिप्ट को छोटा करना चाहते हैं, तो समस्या से बचने के लिए ऐरे इंजेक्शन के तरीके का उपयोग करें:['service1', function(service1) {}]
शमौन बेलांगर

2
आप ngminग्रंट कार्य का उपयोग या संबद्ध भी कर सकते हैं ।
जॉन लेडबेटर

यदि आप उसी सेवा से एक और विधि का उपयोग करना चाहते हैं, तो मुझे लगता है कि आप उसी सेवा को सेवा में इंजेक्ट नहीं करना चाहेंगे; यह 'यह' का उपयोग करके कॉल करने की कोशिश करना मेरे लिए काम नहीं लगता, हालांकि, इसे करने का सबसे अच्छा तरीका क्या है, इस पर कोई विचार? धन्यवाद!
टिम्मक 22

जरा सोचिए कि अगर आप 'सर्विस 1' को 'सर्विस 2' में इंजेक्ट करते हैं, और 'सर्विस 2' को 'सर्विस 1' में भी इंजेक्ट करते हैं, तब क्या होगा? क्या होगा यदि एक सेवा की दूसरे सेवा के आरंभ पर निर्भर करता है?
शिनान

@Xinan उस मामले में कोणीय निर्भर चक्रीय निर्भरता की त्रुटि फेंक देंगे। इसलिए इससे बचें और वैसे भी जो एक अच्छा प्रोग्रामिंग अभ्यास नहीं है।
jitenagarwal19

8

हाँ। इस तरह (यह एक प्रदाता है, लेकिन यही बात लागू होती है)

    module.provider('SomeService', function () {


    this.$get = ['$q','$db','$rootScope', '$timeout', 
                function($q,$db,$rootScope, $timeout) {
          return reval;
    }
    });

इस उदाहरण $dbमें, ऐप में कहीं और घोषित की गई सेवा है और प्रदाता के $getफ़ंक्शन में इंजेक्ट की जाती है।


5

किसी भी भ्रम से बचने के लिए, मुझे लगता है कि यह भी ध्यान देने योग्य है कि यदि आप अपने चाइल्ड सर्विस में किसी अन्य सेवाओं (जैसे $ http, $ कुकीज़, $ राज्य) का उपयोग कर रहे हैं, तो आपको उन्हें स्पष्ट रूप से घोषित करने की भी आवश्यकता है।

जैसे

function() {
  var childService = function($http, $cookies, parentService) {

  // Methods inherited
  this.method1Inherited = parentService.method1();
  this.method2Inherited = parentService.method2();

  // You can always add more functionality to your child service

  angular.module("app").service("childService", ["$http", "$cookies", "parentService", childService]);

}());

आप या तो अपने बच्चे के अंदर उपयोग की जा रही सेवाओं को एक ऐरे में घोषित कर सकते हैं और फिर वे स्वचालित रूप से इंजेक्ट हो जाते हैं, या उन्हें $ इंजेक्शन एनोटेशन के साथ अलग से इंजेक्ट कर सकते हैं:

childService.$inject = ["$http", "$cookies", "parentService"]; 
angular.module("app").service("childService ", childService );
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.