我对Angular 2和它的依赖注入功能有些陌生,但还不能找到一种简单的方法来改变基于路由的组件依赖。
也就是说,给定一个接受服务的组件。
MyReusableComponent {
constructor(private service: ServiceIWantToChange){}
}
假设我在web应用程序的不同部分中添加了一个新路由,该路由将重用该组件。
我想做这样的事情: NewAreaRoutingModule
{
path: "newRoute",
component: MyReusableComponent,
** my made up provider area ** -providers: [{provide:
ServiceIWantToChange, useClass: MyServiceWithChanges}]
}
这就是我的想法,作为处理位置敏感依赖的一种方法。
我认为我可以提供一个覆盖的组件实现,为可重用的组件提供一个新的依赖关系,但我希望只更改路由中的依赖关系。
我一直在围绕解析器等做研究,但这些似乎更多的是为了提供数据。我还注意到有人注入了注入器,并进行了if检查,以获得正确的组件。有几种不同的看法。我确信我遗漏了一些关于路由和DI的东西,但是我找不到任何简单的东西。我知道有一些解决办法,但我希望找到一个更优雅的解决方案,并只想知道我想做的事情是否可能实现。
谢谢!
以下是用例细节,以防我在总体上处理此问题时出错……在系统的一个区域中,我希望使用一个服务,该服务可以访问服务器上的一个rest端点版本,而在系统的另一部分中,我希望重用完全相同的组件,但让它将请求发送到不同的端点集合。
发布于 2018-09-12 22:58:17
将注入令牌与路由数据相结合可以得到所需的结果。使用不同的注入令牌提供您的服务:
const FIRST_SERVICE_TOKEN = new InjectionToken<string>("FirstService");
const SECOND_SERVICE_TOKEN = new InjectionToken<string>("SecondService");
@NgModule({
providers: [
{
provide: FIRST_SERVICE_TOKEN,
useClass: FirstService
},
{
provide: SECOND_SERVICE_TOKEN,
useClass: SecondService
}
],
})
class AppModule {}
然后,使用路由数据指定每个路由的依赖关系:
{path: 'first-route', component: MyComponent, data: {requiredService: FIRST_SERVICE_TOKEN}},
{path: 'second-route', component: MyComponent, data: {requiredService: SECOND_SERVICE_TOKEN}}
最后利用路由数据得到相应的服务
export class MyComponent{
private myService;
constructor(route: ActivatedRoute, injector:Injector){
const serviceToken = route.snapshot.data['requiredService'];
this.myService = injector.get(serviceToken)
}
}
https://stackoverflow.com/questions/52304190
复制相似问题