जब कोणीय सीएलआई में सेवाएं सृजित की जाती हैं, तो यह इंजेक्टेबल डेकोरेटर के लिए 'रूट' के डिफॉल्ट के साथ प्रॉपर्टी में 'अतिरिक्त' के साथ अतिरिक्त मेटाडेटा जोड़ रहा है।
@Injectable({
providedIn: 'root',
})
वास्तव में क्या प्रदान करता है? मैं यह मान रहा हूं कि यह सेवा पूरे एप्लिकेशन के लिए 'वैश्विक' प्रकार की सिंगलटन सेवा की तरह उपलब्ध है, हालांकि, AppModule के प्रदाता सरणी में ऐसी सेवाओं की घोषणा करने के लिए क्लीनर नहीं होगा?
अपडेट करें:
किसी और के लिए, निम्नलिखित पैराग्राफ ने इसकी एक और अच्छी व्याख्या प्रदान की, विशेष रूप से यदि आप केवल एक फीचर मॉड्यूल को अपनी सेवा प्रदान करना चाहते हैं।
अब एक नई, अनुशंसित, एक प्रदाता को पंजीकृत करने का तरीका है, सीधे
@Injectable()डेकोरेटर के अंदर , नईprovidedInविशेषता का उपयोग करके । यह'root'आपके एप्लिकेशन के मूल्य या किसी भी मॉड्यूल के रूप में स्वीकार करता है । जब आप उपयोग करते हैं'root', तो आपकेinjectableएप्लिकेशन में एक सिंगलटन के रूप में पंजीकृत किया जाएगा, और आपको इसे रूट मॉड्यूल के प्रदाताओं में जोड़ने की आवश्यकता नहीं है। इसी तरह, यदि आप उपयोग करते हैंprovidedIn: UsersModule, तो इसे मॉड्यूल में जोड़े बिनाinjectableप्रदाता के रूप में पंजीकृत किया जाता है । "- https://blog.ninja-squad.com/2018/05/04/what-is-new-angular -6 /UsersModuleproviders
अद्यतन 2:
आगे की जांच के बाद, मैंने फैसला किया है कि यह केवल उपयोगी है providedIn: 'root'
यदि आप provideरूट मॉड्यूल के अलावा किसी अन्य मॉड्यूल में सेवा करना चाहते हैं , तो आप providersसुविधा मॉड्यूल के सज्जाकारों में सरणी का उपयोग करने से बेहतर हैं , अन्यथा आप परिपत्र निर्भरता से ग्रस्त हो जाएंगे। यहाँ होने वाली दिलचस्प चर्चाएँ - https://github.com/angular/angular-cli/issues/10170