繁体   English   中英

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

[英]Do app.module providers and components share the same instance of an Injectable?

当我将可注射的CameraChannelService添加到ngModule的provider数组中时:

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);
  }
}

是...

如果您将providers: [CameraChannelService]添加到Component的@Component decorator ,它将创建一个仅作用于该组件的新实例

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

因此,如果要在整个应用程序中使用同一实例 ,则仅 AppModule.ts文件的@NgModule decorator声明服务,而不必在Component's @Component decorator再次声明


旁注 :与其宣称的服务@NgModule ,使用CoreModule申报服务并将其导入AppModule 因此,以后如果您想配置服务,就可以配置服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM