जब कोणीय सीएलआई में सेवाएं सृजित की जाती हैं, तो यह इंजेक्टेबल डेकोरेटर के लिए 'रूट' के डिफॉल्ट के साथ प्रॉपर्टी में 'अतिरिक्त' के साथ अतिरिक्त मेटाडेटा जोड़ रहा है।
@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 /UsersModule
providers
अद्यतन 2:
आगे की जांच के बाद, मैंने फैसला किया है कि यह केवल उपयोगी है providedIn: 'root'
यदि आप provide
रूट मॉड्यूल के अलावा किसी अन्य मॉड्यूल में सेवा करना चाहते हैं , तो आप providers
सुविधा मॉड्यूल के सज्जाकारों में सरणी का उपयोग करने से बेहतर हैं , अन्यथा आप परिपत्र निर्भरता से ग्रस्त हो जाएंगे। यहाँ होने वाली दिलचस्प चर्चाएँ - https://github.com/angular/angular-cli/issues/10170