Обновление (Angular 6+)
Изменился рекомендуемый способ создания одноэлементной службы . Теперь рекомендуется указать в @Injectable
декораторе службы, что она должна находиться в «корне». Для меня это имеет большой смысл, и больше нет необходимости перечислять все предоставляемые услуги в ваших модулях. Вы просто импортируете услуги, когда они вам нужны, и они регистрируются в нужном месте. Вы также можете указать модуль, чтобы он предоставлялся только в том случае, если модуль импортирован.
@Injectable({
providedIn: 'root',
})
export class ApiService {
}
Обновление (Angular 2)
Я думаю, что с помощью NgModule способ сделать это сейчас - создать «CoreModule» с вашим классом обслуживания в нем и перечислить службу в поставщиках модуля. Затем вы импортируете основной модуль в свой основной модуль приложения, который предоставит один экземпляр всем дочерним элементам, запрашивающим этот класс в своих конструкторах:
CoreModule.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ApiService } from './api.service';
@NgModule({
imports: [
CommonModule
],
exports: [
],
declarations: [
],
providers: [
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
],
providers: [],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Оригинальный ответ
Если вы укажете поставщика в bootstrap()
, вам не нужно указывать его в декораторе компонентов:
import { ApiService } from '../core/api-service';
@Component({
selector: 'main-app',
templateUrl: '/views/main-app.html',
})
export class MainAppComponent {
constructor(private api: ApiService) {}
}
Фактически, перечисление вашего класса в «поставщики» создает новый его экземпляр, если какой-либо родительский компонент уже перечисляет его, тогда дочерним элементам это не нужно, и если они это сделают, они получат новый экземпляр.
UserService
и ниFacebookService
кproviders
чему?