2016-12-07 4 views
3

は私angular2アプリではありますにもかかわらず、私はいくつかのモジュールを持って、ルートモジュールを越えてほとんどが怠惰はItemModuleでAngular2サービス:二つの成分に異なるインスタンスを取得するだけで1つのプロバイダ

Routes = [{ 
    path: '', 
    redirectTo: '/home', 
    pathMatch: 'full' 
    }, 
    ... 
    { 
    path: 'item', 
    loadChildren: 'app/item/item.module#ItemModule' 
    } 

をロードされている、私が持っていますそれはコンストラクタで注入しますと、「プロバイダ」私はモジュール構造の理解何からそう

@NgModule({ 
imports:  [ 
... 
], 
declarations: [ 
    ItemDetailComponent, 
    ItemComponent, 
    ItemSearchComponent 
], 
exports:  [ 
], 
providers: [ 
    ItemSearchService 
] 
}) 

の下にリストされているItemSearchService、ItemDetailComponentとItemSearchComponentの両方がItemSearchServiceの同じインスタンスを取得する必要があります。私はこれを実行すると

export class ItemSearchComponent implements OnInit { 
    constructor(private http: Http, private itemSearch: ItemSearchService ...) 

export class ItemDetailComponent implements OnInit{ 
    constructor(private route: ActivatedRoute, private itemSearch: ItemSearchService ...) 

はまだ、できるだけ早く私はIteamSearchComponentからItemDetailComponentに移動して、ItemDetailComponentはもちろん意図されていないItemSearchService、新しい、別のインスタンスを取得します。

ルートモジュールでItemSearchServiceを提供するとすべて正常に動作し、すべてのコンポーネントが同じインスタンスを取得しますが、プロバイダをItemModuleに移動すると何かが間違っているようです。

これは、遅延ロードされているItemModuleと何か関係がありますか?私はここで少し迷っています。AppModuleにアプリ全体のシングルトンとしてサービスを提供するだけで十分な問題ではありませんが、すべてのサービスをルートに置くことは望ましくありません長い目で見れば、私はここで何かを見逃していますか?

答えて

1

角2では、Hierarchical Dependency Injectionがあります。

すべてのコンポーネントには、それ自身のインジェクタとインジェクタツリーがあり、それらは親インジェクタで満たされています。あなたは提供されたリンクでそれについてもっと読むことができます。

サービスのctorにデバッグを配置すると、ctorが2回呼び出されます。コンポーネントごとに1回。

関連する問題