Поставщики и компоненты 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, Итак, позже, если вы захотите настроить свой сервис, вы сможете настроить свой сервис.

Другие вопросы по тегам