2017-09-17 7 views
4

私はapp.module.tsでサービスを登録する場合、私はコンポーネントapp.module.tsの登録サービスと、angular4の個々のコンポーネントの利点は何ですか?例えば

app.module.ts

import { AppComponent } from './app.component'; 
import { MyComponent } from './mycomponent/mycomponent.component'; 
import { MyService } from './services/myservice.service'; 


@NgModule({ 
    declarations: [ 
    AppComponent, 
    MyComponent 
    ], 
    imports: [ 
    ], 
    providers: [MyService], 
    bootstrap: [AppComponent] 
}) 

mycomponent.component.ts

import { Component, OnInit } from '@angular/core'; 
import { MyService } from '../services/myservice.service'; 

@Component({ 
    selector: 'my-selector', 
    templateUrl: './mycomponent.component.html', 
    styleUrls: ['./my-component.component.scss'] 
}) 
export class MyComponent implements OnInit { 

    constructor(private _myService: MyService) { } 

    ngOnInit() { 
     this._myService.test() 
    } 

} 

でサービスを利用できるように次の操作を実行する必要がしかし、私はちょうどもできましたコンポーネント自体に登録して、何も追加せずに使用します。app.module.ts

import { Component, OnInit } from '@angular/core'; 
import { MyService } from '../services/myservice.service'; 

@Component({ 
    selector: 'my-selector', 
    templateUrl: './mycomponent.component.html', 
    styleUrls: ['./my-component.component.scss'], 
    providers: [MyService] 
}) 
export class MyComponent implements OnInit { 

    constructor(private _myService: MyService) { } 

    ngOnInit() { 
     this._myService.test() 
    } 

} 

私は好奇心が強いですが、それぞれの違いは何ですか?

+0

モジュールレベルで定義されたプロバイダは、グローバルインジェクタの一部になります。[モジュールで一般的な混乱を避ける](https://blog.angularindepth.com/avoiding-common-confusions-with-modules-in-angular- ada070e6891f) –

答えて

5

アプリケーションをルートプロバイダに追加すると、すべてのコンポーネントが同じサービスインスタンスを注入します。したがって、アプリケーション中に1つのインスタンスのみが作成されます。この場合、stateをあなたのサービスに入れておくことができます。

あなたがサービスの新しいinstanceも作成され、あなたのComponentのプロバイダにコンポーネントが作成されることを毎回の新しいインスタンスをあなたのサービスを追加します。この場合、

のロジックに応じて、必要な場所に応じてルートモジュールにすべてのサービスを提供することができますが、このタイプのサービスにはstateを保存することはできません。

+0

@ AngularInDepth.comどういう意味ですか?どのプロバイダーですか? – yurzui

+0

プロバイダをルートコンポーネントと個別コンポーネントの両方に追加するとどうなりますか? – user3591466

+2

プロバイダ検索は、「コンポーネント」から開始し、親から親に、最終的にはルートに移動します。最初に見つかると、それが注入されます。コンポーネントの階層に応じて、新しいインスタンスまたは単一インスタンスが挿入されます。 –

関連する問題