आज मैंने पाया कि $injector
कॉन्फ़िगर या प्रदाता से इंजेक्शन $injector
सेवा, कारखाने या नियंत्रक से इंजेक्शन से अलग है।
और get()
इस $ इंजेक्टर से कार्य अलग-अलग काम करता है।
$injector
कॉन्फ़िगर या प्रदाता से, get()
कोई सेवा नहीं दे सकता! $injector.get('myService')
Error: [$injector:unpr] Unknown provider: myService
फेंकता है, लेकिन $injector.has('myService')
सत्य लौटाता है। यह बहुत अजीब है।
$injector
सेवा या नियंत्रक से सामान्य रूप से काम करता है।
angular.module('app', [])
.provider('myProvider', function ($injector) {
this.$get = ['$injector', function (serviceInjector) {
return {
providerInjector: $injector,
serviceInjector: serviceInjector
};
}];
})
.service('myService', function() {})
.controller('myCtrl', function ($scope, myProvider) {
var providerInjector = myProvider.providerInjector;
var serviceInjector = myProvider.serviceInjector;
console.log(providerInjector === serviceInjector); // -> false
console.log(serviceInjector.has('myService')); // `serviceInjector` has `myService`
console.log(getMyService(serviceInjector)); // `serviceInjector` can get `myService`
console.log(providerInjector.has('myService')); // `providerInjector` has `myService` too!
console.log(getMyService(providerInjector)); // but `providerInjector` can't get `myService`! =(
function getMyService(injector) {
try {
injector.get('myService');
return "OK";
} catch (e) {
return e.toString();
}
}
});
किसी को भी व्याख्या कर सकते हैं क्यों दो अलग इंजेक्टर है वहाँ:
यहाँ बेहतर समझ के लिए एक कोड नमूना है?
और मैं सेवा इंजेक्ट करने के लिए प्रदाता/कॉन्फ़िगरेशन से $ इंजेक्टर का उपयोग कैसे कर सकता हूं (सेवा के बाद सेवा शुरू की गई थी)?
पीएस मैं कोणीय 1.3.13
आपका प्रश्न थोड़ा अस्पष्ट है। प्रदाता/कॉन्फ़िगरेशन में आप क्या हासिल करना चाहते हैं? क्या आप एक उपयोग केस दे सकते हैं? –
केस का उपयोग करें? उदाहरण के लिए: कॉन्फ़िगरेशन अनुभाग में $ इंजेक्टर के माध्यम से सेवा प्राप्त करें। या प्रदाता। निश्चित रूप से सेवा शुरू करने के बाद। मेरे मामले में (यह दिखाने के लिए बहुत जटिल है) मैं कॉन्फ़िगरेशन अनुभाग में प्रदाता को कॉलबैक जोड़ता हूं। और कॉलबैक में मैं अपनी सेवा का उपयोग करना चाहता हूं। DI इसके साथ मेरी मदद नहीं कर सकता, इसलिए मैं $ इंजेक्टर का उपयोग करता हूं। इस कॉलबैक को नियंत्रक से बुलाया जाएगा, जब सेवा पहले ही शुरू की गई थी। –