javascript - कोणीय 6 निर्भरता इंजेक्शन




angular typescript (3)

कोणीय 6 की नवीनतम रिलीज में, सेवा मेटाडाटा में दिए providedIn संपत्ति में एक मॉड्यूल का उपयोग करके पंजीकृत है:

@Injectable({
  providedIn: 'root',
})
export class HeroService {}

हालाँकि प्रलेखन अभी भी मॉड्यूल मेटाडेटा में मॉड्यूल providers सरणी में सेवा को पंजीकृत करने के लिए संदर्भित करता है जैसे हमने Angular 5 में किया था:

@NgModule({
  providers: [HeroService],
})
export class AppModule {}

इसलिए,

  • इंजेक्टर को उस सेवा के बारे में जागरूक करने के लिए किस विधि का उपयोग किया जाना चाहिए जिसे वह इंजेक्ट करना चाहिए?
  • क्या मॉड्यूल providers सरणी विधि को पदावनत किया जाएगा?

https://code.i-harness.com


मूल रूप से आप या तो उपयोग कर सकते हैं, लेकिन नए सीएलआई के अनुसार service करते समय स्वचालित रूप से जोड़ा जाएगा

इसमें प्रदत्त

अब एक नया, अनुशंसित, प्रदाता को पंजीकृत करने का तरीका है, सीधे @Injectable() डेकोरेटर के अंदर, नए दिए गए विशेषता का उपयोग करके। यह आपके एप्लिकेशन के मूल्य या किसी भी मॉड्यूल के रूप में 'root' को स्वीकार करता है। जब आप 'root' उपयोग करते हैं, तो आपके इंजेक्शन को एप्लिकेशन में एक सिंगलटन के रूप में पंजीकृत किया जाएगा, और आपको इसे रूट मॉड्यूल के प्रदाताओं में जोड़ने की आवश्यकता नहीं है। इसी तरह, यदि आप providedIn: UsersModule उपयोग करते हैं providedIn: UsersModule , इंजेक्टेबल को मॉड्यूल के प्रदाताओं में शामिल किए बिना UsersModule प्रदाता के रूप में पंजीकृत किया जाता है।

यह नया तरीका एक बेहतर ट्री-शेकिंग के लिए पेश किया गया है। वर्तमान में एक मॉड्यूल के प्रदाताओं में जोड़ी जाने वाली एक सेवा अंतिम बंडल में समाप्त हो जाएगी, भले ही इसका उपयोग एप्लिकेशन में न किया जाए, जो थोड़ा दुखद है।

अधिक जानकारी के लिए कृपया यहाँ देखें


यदि आप कोणीय 5+ डेवलपर का उपयोग कर रहे हैं, तो प्रदान किए जाने पर यह स्वचालित रूप से इंजेक्टेबल सेवा बना देगा: 'रूट', इस मामले में आपको ऐप में सेवा आयात करने की आवश्यकता नहीं होगी। आप इसे सीधे दूसरे घटक में उपयोग कर सकते हैं।


@NgModule() और @Component() सज्जाकारों के पास प्रदाता मेटाडेटा विकल्प है, जहां आप NgModule-level या घटक-स्तरीय इंजेक्टर के लिए प्रदाताओं को कॉन्फ़िगर कर सकते हैं।

@ इंजेक्टेबल () डेकोरेटर के पास प्रोवाइड मेटाडेटा विकल्प है, जहाँ आप सजाया गया सेवा वर्ग के प्रदाता को रूट इंजेक्टर के साथ निर्दिष्ट कर सकते हैं, या किसी विशिष्ट NgModule के लिए इंजेक्टर के साथ।

आपके मामले में, क्योंकि यह "मूल" स्तर पर प्रदान किया गया है, मॉड्यूल में प्रदाता के रूप में इसे फिर से जोड़ने की आवश्यकता नहीं है।

यहाँ निर्भरता इंजेक्शन के बारे में अधिक







angular6