2017-10-09 7 views
0

私は角のあるアプリケーションanimalsを持っています。これは現在のルートの場所に応じて動物の画像を表示します。たとえば、/dogは犬の画像を表示し、/catは猫の画像をページに表示します。角2:ルートに基づいてサービスを提供する

これを達成するために、私はAnimalBoxModule,CatModuleおよびDogModuleという3つの機能モジュールを作成しました。 AnimalBoxModuleは、コンポーネントAnimalBoxComponentとサービスAnimalServiceを持っています。 AnimalBoxComponentAnimalService.getPicture()を使用して動物の画像を取得します。 DogModuleおよびCatModuleは、DogServiceおよびCatServiceを有し、それぞれAnimalServiceのカスタム実装を提供して、それぞれ猫および犬の画像を表示することができる。

AppComponent<animal-box></animal-box>をレンダリングしています。動物の正しい画像を表示するには、現在のルートの位置に応じてサービスの実装(CatServiceまたはDogService)を提供する必要があります。どのように角度で可能ですか?事前に

おかげ

編集

は、私は、再利用可能なコンポーネントとして、それを提示していますので、サービスを利用しているAnimalBoxComponentの変更をしたいいけません。 IMOでは、このアプリを拡張して動物サービスを増やしたいときはいつでも、それを変更するのは良い考えではありません。

+0

hmmm ...通常、別々のサービスを使用する場合は、別々のコンポーネントを持つ方がよいでしょう。しかし、私はあなたがこれを望む方法を見ることができます。あなたは 'ActivatedRouteSnapshot'を使ってみましたか? – FussinHussin

+0

@FussinHussinいいえ、それについて知りませんでした。それを試みるつもりです。ありがとう –

+0

あなたは、文字列がdogやcatのような有効なルートと一致するかどうかを確認し、それに基づいてサービスを注入することができます。最も難しい部分は、条件付きでサービスを注入する方法を理解することです。 – FussinHussin

答えて

0

角速度インジェクタを使用してこれを行うことができるようです。あなたの質問に答える投稿hereがあります。

import { Injector } from '@angular/core' 
... 
constructor(private injector: Injector){ 

    if(true) { 
    this.oneService = <OneService>this.injector.get(OneService); 
    } else { 
    this.twoService = <TwoService>this.injector.get(TwoService); 
    } 
} 

理由についての詳しい情報があるので、私はその記事を読んでいます。

+0

あなたの答えをありがとう、私は私の問題をうまく説明していないため、申し訳ありません。問題の記述に説明を追加しましたが、なぜこの解決策に賛成できないのですか? –

+0

ええ、わかりました。私は別の方法がわからない、あなたは賞金を開始することを検討するかもしれない – FussinHussin

関連する問題