2017-10-09 131 views
0

我有一個角度應用程序animals,根據當前路線位置顯示動物圖片。例如,/dog將顯示狗圖片,/cat將在頁面上顯示貓圖片。角2:提供基於路線的服務實施

爲了實現它,我創建了3個功能模塊 - AnimalBoxModuleCatModuleDogModuleAnimalBoxModule具有組件AnimalBoxComponent和服務AnimalServiceAnimalBoxComponent使用AnimalService.getPicture()來獲得動物的圖像。 DogModuleCatModule具有DogServiceCatService,它們可以分別用於提供自定義實現AnimalService來顯示貓和狗的圖片。

我正在渲染<animal-box></animal-box>AppComponent。要顯示正確的動物圖片,我必須根據當前的路線位置提供服務實施(CatServiceDogService)。 Angular中怎麼可能?

由於提前

編輯

我不想讓這是使用該服務,因爲我提出它作爲一個可重用組件在AnimalBoxComponent任何變化。國際海事組織,只要我們想擴展這個應用程序來獲得更多的動物服務,改變它並不是一個好主意。

+0

嗯......通常最好是有獨立的組件,如果他們使用不同的服務。但我可以看到你怎麼會想要這個。你嘗試過使用'ActivatedRouteSnapshot'嗎? – FussinHussin

+0

@FussinHussin不,不知道。去嘗試一下。謝謝 –

+0

你可以檢查一個字符串是否與激活的路由相匹配,如狗或貓,並根據它注入服務。最難的部分將是搞清楚如何有條件地注入服務。 – 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