Güncelleme (Açısal 6 +)
Singleton hizmeti oluşturmanın önerilen yolu değişti. Şimdi @Injectable
dekoratörde hizmetin 'kök' içinde sağlanması gerektiğini belirtmeniz önerilir . Bu benim için çok mantıklı ve artık modüllerinizde sağlanan tüm hizmetleri listelemeye gerek yok. Hizmetleri ihtiyacınız olduğunda içe aktarırsınız ve kendilerini uygun yere kaydederler. Ayrıca , yalnızca modül içe aktarılmışsa sağlanacak bir modül de belirtebilirsiniz .
@Injectable({
providedIn: 'root',
})
export class ApiService {
}
Güncelleme (Açısal 2)
NgModule ile bunu yapmanın yolu, bence hizmet sınıfınızda bir 'CoreModule' oluşturmak ve hizmeti modülün sağlayıcılarında listelemek. Daha sonra ana uygulama modülünüzde, bu örneği kurucularında bu sınıfı isteyen çocuklara bir örnek sağlayacak olan çekirdek modülü içe aktarırsınız:
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 { }
Orijinal Yanıt
Alanında bir sağlayıcı bootstrap()
listelerseniz, bileşen dekoratörünüzde listelemenize gerek yoktur:
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) {}
}
Aslında sınıfınızı 'sağlayıcılar' içinde listelemek yeni bir örneği oluşturur, eğer herhangi bir üst bileşen zaten listelemişse çocukların buna gerek yoktur ve eğer yaparlarsa yeni bir örnek alırlar.
UserService
veFacebookService
hiçproviders
başka bir yerde?