app.module提供程序和组件是否共享Injectable的同一个实例?

时间:2016-10-30 07:22:02

标签: angular dependency-injection injectable angular2-providers ng-modules

当我将可注射的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 个答案:

答案 0 :(得分:2)

是...

如果您将 providers: [CameraChannelService] 添加到 @Component decorator 会创建一个范围为该组件仅

如果您在 providers: [CameraChannelService] 中声明 @NgModule 创建一个作用于整个应用程序的实例 < / strong>即可。

因此,如果您想在整个应用程序中使用相同的实例,那么只有 {{ @NgModule decorator 中声明服务1}} 文件,不要在 AppModule.ts

中再次声明

旁注:不要将服务声明为 Component's @Component decorator ,而是使用 CoreModule 来声明服务并导入进入 @NgModule 。因此,稍后如果您要配置服务,您将能够配置您的服务。