【问题标题】:Angular 2: Providing Service Implementation based on routesAngular 2:基于路由提供服务实现
【发布时间】:2017-10-09 11:18:14
【问题描述】:

我有一个角度应用程序animals,它根据当前路线位置显示动物的图片。例如,/dog 将在页面上显示狗图片,/cat 将在页面上显示猫图片。

为了实现它,我创建了 3 个功能模块 - AnimalBoxModuleCatModuleDogModuleAnimalBoxModule 有一个组件 AnimalBoxComponent 和一个服务 AnimalServiceAnimalBoxComponent 使用 AnimalService.getPicture() 获取动物的图像。 DogModuleCatModuleDogServiceCatService 可用于提供AnimalService 的自定义实现,分别显示猫和狗的图片。

我在AppComponent 中渲染<animal-box></animal-box>。为了显示正确的动物图片,我必须根据当前路线位置提供服务实现(CatServiceDogService)。在 Angular 中怎么可能?

提前致谢

编辑

我不想对正在使用该服务的AnimalBoxComponent 进行任何更改,因为我将其呈现为可重用组件。 IMO,当我们想要扩展这个应用程序以提供更多动物服务时,更改它不是一个好主意。

【问题讨论】:

  • hmmm... 通常,如果它们使用不同的服务,最好有单独的组件。但我知道你怎么会想要这个。您是否尝试过使用ActivatedRouteSnapshot
  • @FussinHussin 不,不知道。打算试试。谢谢
  • 你可以检查一个字符串是否匹配激活的路由,比如狗或猫,并根据它注入服务。最困难的部分将是弄清楚如何有条件地注入服务。
  • 感谢@FussinHussin,有条件地注入服务,我被卡住了。任何指针或提示将不胜感激。

标签: angular angular-routing angular-services


【解决方案1】:

好的,看来您可以使用 Angular Injector 来执行此操作,有一个帖子 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);
  }
}

我会阅读这篇文章,因为它有更多关于原因的信息。

【讨论】:

  • 感谢您的回答,很抱歉我没有很好地解释我的问题。我在问题陈述中添加了解释,为什么我不赞成这个解决方案。
  • 嗯,好的,我明白了。我不确定其他方式,你可以考虑开始赏金
猜你喜欢
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
相关资源
最近更新 更多