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 宣言コンポーネントの 1 つに挿入すると?

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 decoratorに追加すると、そのコンポーネントのみを対象とする新しいインスタンスが作成されます

で宣言するproviders: [CameraChannelService]、アプリケーション全体をスコープとするインスタンス@NgModuleが作成されます。

したがって、アプリケーション全体で同じインスタンスを使用したい場合は、ファイル内でサービスを宣言する@NgModule decoratorだけで、AppModule.tsファイル内で再度宣言しないでください。Component's @Component decorator


補足: サービスを宣言するのではなく、 CoreModule@NgModuleを使用してサービスを宣言し、それを にインポートします。そのため、後でサービスを構成する場合は、サービスを構成できます。AppModule

于 2016-10-30T07:25:22.473 に答える