我有一个组件,我想在两条不同的路线中使用它,并为每条路线提供不同的服务 - 但我不确定如何做到这一点。我想避免在组件中放置逻辑来决定使用哪个服务。
class MyPage {
constructor(service: MyServiceInterface)
}
路线
routes = [
{ path: 'one', component: MyPage },
{ path: 'two', component: MyPage }
]
然后在模块中 - 我想为每个路由的 MyServiceInterface
提供不同的服务
providers: [
{ provide: MyServiceInterface, useClass: PageOneService },
{ provide: MyServiceInterface, useClass: PageTwoService }
]
答案 0 :(得分:0)
正如 Andrei 在对问题的评论中所说的那样,无法将提供者与路线相关联。在像您这样的情况下,当您有两个路由与同一个组件相关联时,组件可以知道使用哪个路由来实例化它,但只有在在其构造函数被注入所有内容之后。 >
基本上你必须改变你的策略,而不是依赖注入的服务,你应该使用路由的 data
或 resolve
属性。
data
用于静态数据resolve
调用可以获取动态数据的守卫。在您的情况下执行此操作的一种方法是使用两个不同的守卫(PageOneGuard
、PageTwoGuard
),这取决于相应的服务(PageOneService
、PageTwoService
)并最终生成一个组件可以使用的值。