अद्यतन (कोणीय 6 +)
एकल सेवा बनाने का अनुशंसित तरीका बदल गया है। अब @Injectable
सेवा में डेकोरेटर को यह निर्दिष्ट करने की सिफारिश की जाती है कि इसे 'रूट' में प्रदान किया जाना चाहिए। यह मेरे लिए बहुत मायने रखता है और अब आपके मॉड्यूल में सभी प्रदान की गई सेवाओं को सूचीबद्ध करने की कोई आवश्यकता नहीं है। आप बस सेवाओं को आयात करते हैं जब आपको उनकी आवश्यकता होती है और वे स्वयं को उचित स्थान पर पंजीकृत करते हैं। आप एक मॉड्यूल भी निर्दिष्ट कर सकते हैं, इसलिए यह केवल तब प्रदान किया जाएगा जब मॉड्यूल आयात किया गया हो।
@Injectable({
providedIn: 'root',
})
export class ApiService {
}
अद्यतन (कोणीय 2)
NgModule के साथ, अब ऐसा करने का तरीका मुझे लगता है कि इसमें आपकी सेवा कक्षा के साथ एक 'CoreModule' बनाना है, और मॉड्यूल के प्रदाताओं में सेवा को सूचीबद्ध करना है। फिर आप अपने मुख्य ऐप मॉड्यूल में मुख्य मॉड्यूल को आयात करते हैं जो कि किसी भी बच्चे को अपने निर्माणकर्ताओं में उस कक्षा का अनुरोध करने के लिए एक उदाहरण प्रदान करेगा:
CoreModule.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ApiService } from './api.service';
@NgModule({
imports: [
CommonModule
],
exports: [ // components that we want to make available
],
declarations: [ // components for use in THIS module
],
providers: [ // singleton services
ApiService,
]
})
export class CoreModule { }
AppModule.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AppComponent } from './app.component';
import { CoreModule } from './core/core.module';
@NgModule({
declarations: [ AppComponent ],
imports: [
CommonModule,
CoreModule // will provide ApiService
],
providers: [],
bootstrap: [ AppComponent ]
})
export class AppModule { }
मूल उत्तर
यदि आप एक प्रदाता bootstrap()
को सूचीबद्ध करते हैं, तो आपको उन्हें अपने घटक डेकोरेटर में सूचीबद्ध करने की आवश्यकता नहीं है:
import { ApiService } from '../core/api-service';
@Component({
selector: 'main-app',
templateUrl: '/views/main-app.html',
// DO NOT LIST PROVIDERS HERE IF THEY ARE IN bootstrap()!
// (unless you want a new instance)
//providers: [ApiService]
})
export class MainAppComponent {
constructor(private api: ApiService) {}
}
वास्तव में 'प्रोवाइडर्स' में आपकी कक्षा को सूचीबद्ध करने से इसका एक नया उदाहरण बनता है, अगर कोई अभिभावक घटक पहले से ही इसे सूचीबद्ध करता है तो बच्चों को इसकी आवश्यकता नहीं है, और यदि वे ऐसा करते हैं तो उन्हें एक नया उदाहरण मिलेगा।
UserService
औरFacebookService
करने के लिएproviders
कहीं और?