[英]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.