2017-09-08 7 views
0

私は次のような階層を持っています。angular4の階層依存性注入

Component1 
    Component2 
     component3 

この階層を使用することも、ユーザーはcomponent2またはcomponent3を個別に使用することもできます。 各コンポーネントにAggregatorServiceが注入されます。

親が存在するかどうかをチェックするように集約サービスを注入する必要があります。新しいインスタンスを作成する代わりにそのサービスインスタンスを使用する必要があります。

個別に使用する場合は、サービスの新しいインスタンスを取得する必要があります。

私たちが最も近い注射を好みたいのであれば、それはうまくいきます。

しかし、これをどのように達成できますか?あなたは@Optional()

constructor(@Optional() private service?:AggregatorService) { 
    if(!this.service) { 
    this.service = new AggregatorService(); 
    } 
} 

や小さな欠点は、ここでは常に自身のインスタンスが作成されていること、である が、その後低下したnew

@Component({ 
    selector: '...', 
    providers: [{provide: 'myAggService', useClass: AggregatorService}], 
}) 
constructor(@Optional() @SkipSelf() private service?:AggregatorService, @Inject('myAggService') myAggService:AggregatorService) { 
    if(!this.service) { 
    this.service = myAggService; 
    } 
} 

でインスタンスを作成しないようにするを使用することができます

+0

「コンポーネントが注入される」とはどういう意味ですか?通常、コンポーネントは注入されません。 「集約サービス」とは何ですか?あなたが達成しようとしていることを示すコードをいくつか追加してください。 –

+0

成分が注入されていません。私は、各コンポーネントがコンストラクタに注入された同じサービスを持つことを意味しました。 実際にあなたは私の要件を理解しています。あなたの回避策を試してみましょう。 – tushar

答えて

0

親から1つが受信された場合。

+0

この場合、を使用すると、Component3に別のオブジェクトが作成されますか? Component3では、この場合Component1で作成されたサービスインスタンスが必要です。ご確認ください。 – tushar

+0

あなたの質問の下のコメントに私の質問に答えてください。そうでなければ、実際に何を達成しようとしているのか分かりません。 –

+0

私のアプローチは、親スコープがサービスを提供する場合、これが使用され、そうでない場合、このコンポーネントの新しいインスタンスが作成されるということです。 –