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