2017-10-09 98 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