【发布时间】:2021-07-13 02:23:51
【问题描述】:
我有一个组件,我想在两条单独的路线中使用,并为每条路线提供不同的服务 - 但我不确定如何执行此操作。我想避免将逻辑放在组件中来决定使用哪个服务。
class MyPage {
constructor(service: MyServiceInterface)
}
路线
routes = [
{ path: 'one', component: MyPage },
{ path: 'two', component: MyPage }
]
然后在模块中 - 我想为每个路由为 MyServiceInterface 提供不同的服务
providers: [
{ provide: MyServiceInterface, useClass: PageOneService },
{ provide: MyServiceInterface, useClass: PageTwoService }
]
【问题讨论】:
-
您可以使用
data属性来解决您的问题,如果路由不是延迟加载的模块,则不可能影响提供者 -
您也可以根据数据使用一些配置逻辑渲染 HostComponetn 以隔离该 logi
-
您可以简单地创建“包装器”组件,这些组件将成为上述服务的提供者,并且在模板中都将您的
MyPage组件作为唯一元素。然后你可以在路由中使用这些组件,这意味着每条路由都有不同的提供者。请记住,您的组件将遍历组件树并查找第一个可能的提供程序,因此它将覆盖模块中注入的服务。 -
谢谢大家 - @TotallyNewb 我考虑过这个,但我不太喜欢样板,但这是一个可行的选择。再次感谢!
标签: angular dependency-injection