0

当我将可注入的 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);
  }
}
4

1 回答 1

2

是的...

如果您添加providers: [CameraChannelService]到 Component's@Component decorator中,它会创建一个仅限于该组件的新实例

如果您providers: [CameraChannelService]在其中声明@NgModule则会创建一个范围为整个应用程序的实例

因此,如果您想在整个应用程序中使用相同的实例,那么只需在文件中声明服务,@NgModule decoratorAppModule.ts不要在文件中再次声明它Component's @Component decorator


旁注:与其声明服务,不如@NgModule使用CoreModule声明服务并将其导入AppModule. 因此,稍后如果您想配置您的服务,您将能够配置您的服务。

于 2016-10-30T07:25:22.473 回答