Поставщики и компоненты app.module используют один и тот же экземпляр Injectable?
Когда я добавляю injectable CameraChannelService в массив провайдера ngModule:
import { CameraChannelService } from './camera-channel.service';
@NgModule({
declarations: [
AppComponent,
BabylonWallpaperDirective,
MenuComponent,
WorksComponent,
LabsComponent,
ProfileComponent,
ActionBtnComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
routing
],
providers: [
CameraChannelService
],
bootstrap: [AppComponent]
})
Создает ли он новый экземпляр только для этого компонента? когда я добавляю его в один из компонентов объявлений NgModules?
import { Component, OnInit } from '@angular/core';
import {CameraChannelService} from '../camera-channel.service';
@Component({
selector: 'app-works',
templateUrl: './works.component.html',
styleUrls: ['./works.component.scss'],
providers: [CameraChannelService]
})
export class WorksComponent implements OnInit {
constructor(private cameraChannel: CameraChannelService) { }
ngOnInit() {
console.log(this.cameraChannel);
}
}
1 ответ
Да...
Если вы добавите providers: [CameraChannelService]
к компонентам @Component decorator
создает новый экземпляр, ограниченный только этим компонентом.
Если вы объявите providers: [CameraChannelService]
в @NgModule
это создает экземпляр, охватываемый всем приложением.
Так что, если вы хотите использовать один и тот же экземпляр во всем приложении, объявите только службу в @NgModule decorator
из AppModule.ts
файл и не объявлять его снова в Component's @Component decorator
Примечание: вместо того, чтобы объявлять @NgModule
, используйте CoreModule, чтобы объявить сервис и импортировать его в AppModule
, Итак, позже, если вы захотите настроить свой сервис, вы сможете настроить свой сервис.