当我将可注射的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);
}
}
答案 0 :(得分:2)
是... 强>
如果您将 providers: [CameraChannelService]
添加到 @Component decorator
, 会创建一个范围为该组件仅 。
如果您在 providers: [CameraChannelService]
中声明 @NgModule
创建一个作用于整个应用程序的实例 < / strong>即可。
因此,如果您想在整个应用程序中使用相同的实例,那么只有在 {{ @NgModule decorator
中声明服务1}} 文件,不要在 AppModule.ts
旁注:不要将服务声明为 Component's @Component decorator
,而是使用 CoreModule 来声明服务并导入进入 @NgModule
。因此,稍后如果您要配置服务,您将能够配置您的服务。